1.2概要
詳細を深く理解する前に、まずcirclizeパッケージの基本的な機能を使用して、パッケージの
まず、ランダムなデータを生成しましょう。 文字ベクトルが必要です現在のカテゴリ、x値の数値ベクトル、y値のベクトル。
set.seed(999)n = 1000df = data.frame(sectors = sample(letters, n, replace = TRUE), x = rnorm(n), y = runif(n))
まず、円形レイアウトを初期化します。 円はセクションに分割されます各カテゴリのx軸上のデータ範囲に基づいています。 次のコードでは、df$x
はdf$sectors
で分割され、セクターの幅は各カテゴリのデータ範囲に基づいて自動的に計算されます。 デフォルトでは、セクタは\(\theta=0\)から(極座標系で)配置され、円に沿って移動する。 Notrackがまだ追加されているため、次のコードを実行した後は何も表示されない場合があります。
library(circlize)circos.par("track.height" = 0.1)circos.initialize(df$sectors, x = df$x)
グローバルパラメータtrack.height
を0に設定します。1オプション関数circis.par()
によって、追加されるすべてのトラックのデフォルトの高さが0.1になるようにします。 Circlizeで使用される円の半径は常に1なので、高さ0.1は円の半径の10%を意味します。 後の章では、cmなどの物理単位で高さを設定する方法を見つけることができます。
セクターの割り当てには、x方向(または円形方向)の値のみが必要であり、y方向(ラジカル方向)の値がトラックを作成するステップで使用されます。
円形レイアウトが初期化された後、トラックごとにプロットにグラフィックスを追加することができます。 何かを描画する前に、alltracksは最初にcircos.trackPlotRegion()
または略してcircos.track()
によって作成されるべきであり、その後低レベル関数を後で追加することができます。 ベースRグラフィックエンジンで考えるだけで、最初にplot()
を呼び出す必要があります。points()
やlines()
などの関数を使用してグラフィックスを追加できます。 トラック内のセルのx範囲は初期化ステップで既に定義されているため、ここでは各セルのy範囲を指定するだけです。 Y範囲は、数値ベクトルとしてy
引数(y範囲が各セルでbeautomatically抽出され計算されるように)または長さ2のavectorとしてylim
引数で指定できます。 原則として、y範囲はasameトラック内のすべてのセルで同じである必要があります。 (図を参照1.2)
circos.track(df$sectors, y = df$y, panel.fun = function(x, y) { circos.text(CELL_META$xcenter, CELL_META$cell.ylim + mm_y(5), CELL_META$sector.index) circos.axis(labels.cex = 0.6)})col = rep(c("#FF0000", "#00FF00"), 4)circos.trackPoints(df$sectors, df$x, df$y, col = col, pch = 16, cex = 0.5)circos.text(-1, 0.5, "text", sector.index = "a", track.index = 1)
図1.2:circlizeの最初の例では、最初のトラックを追加します。
円プロットの軸は、通常、円の最も外側に描画されます。 ここでは、最初のトラックに軸を追加するには、circos.axis()
内部に自己定義関数panel.fun
を入れます(上記のコードを参照)。 circos.track()
はセルごとにプロット領域を作成し、panel.fun
は特定のセルのプロット領域が作成された直後に実際に実行されます。 したがって、panel.fun
は実際には”currentcell”にグラフィックスを追加することを意味します(panel.fun
の使用法は2.7節でさらに議論されています)。引数を指定せずに、circos.axis()
は各セルの上部(または各セルの外側)にx軸を描画します。
また、circos.text()
を使用して、最初のトラックの外側にセクター名を追加します。CELL_META
は、現在のセルの”メタ情報”を提供します。 CELL_META
で取得できるいくつかのパラメータがあります。 そのすべての使用法はセクション2.7で説明されています。 上記のコードでは、セクター名はセルの外側に描かれており、プロット領域を超えるデータポイントを示す警告メッセージが表示されることがあります。 それはそれについての総罰金そして心配ではないです。 また、最初のトラックとして境界線のない空のトラックを作成し、その中にセクター名を追加することもできます(以下の章を通過した後、circos.initializeWithIdeogram()
やchordDiagram()
のように)。
y方向のテキストの位置を指定すると、テキストのy位置にmm_y(5)
(5mm)のオフセットが追加されます。 circos.text()
では、xとyvaluesはデータ座標(セル内の座標)で測定され、絶対単位をデータ座標内の対応する値に変換するヘルパー関数がいくつかあります。 セクション2.8.2では、単位座標の変換に関する詳細情報が提供されています。
トラックが作成された後、circos.trackPoints()
によって最初のトラックにポイントが追加されます。 circos.trackPoints()
単純にすべてのセルにポイントを同時に追加します。 セクション3でさらに説明したように。2、circos.text()
をpanel.fun
に入れることで置き換えられますが、ポイントだけをセルに入れる必要がある場合はcircos.trackPoints()
の方が便利です(ただし、実際にはお勧めしません)。 この関数にはカテゴリ変数(df$sectors
)、x方向およびy方向の値(df$x
およびdf$y
)が必要です。
circos.text()
などの低レベル関数は、上記のコードに示すようにpanel.fun
外で使用することもできます。 その場合、「現在の」セクターと「現在の」トラックはあなたが望むものではないかもしれないので、sector.index
とtrack.index
を明示的に指定する必要があります。 直近に作成されたグラフィックがトラックに直接追加されている場合、track.index
はこのトラックが”現在の”トラックとしてマークされているだけであるため、省略することができます。
さて、次は2番目のトラックにヒストグラムを追加します。 ここでcircos.trackHist()
は高レベルの関数であり、新しいトラックを作成することを意味します(hist()
も高レベルの関数であると想像できます)。 bin.size
は、すべてのセルのヒストグラムのbinsizeが同じであり、互いに比較できるように明示的に設定されています。 (図を参照1.3)
bgcol = rep(c("#EFEFEF", "#CCCCCC"), 4)circos.trackHist(df$sectors, df$x, bin.size = 0.2, bg.col = bgcol, col = NA)
図1.3: Circlizeの最初の例では、2番目のトラックを追加します。
3番目のトラックとpanel.fun
では、各セルで10個のデータポイントをランダムに選択し、x値で並べ替えて線で接続しました。 Followingcodeでは、circos.track()
にsectors
(最初の名前のない引数)、x
、y
引数が設定されている場合、x値とy値はdf$sectors
で分割され、xとy値の対応するサブセットはpanel.fun
からpanel.fun
のx
、y
引数に送信されます。 したがって、x
とy
のpanel.fun
は、実際には”現在の”セルの値です。 (図1を参照。4)
circos.track(df$sectors, x = df$x, y = df$y, panel.fun = function(x, y) { ind = sample(length(x), 10) x2 = x y2 = y od = order(x2) circos.lines(x2, y2)})
図1.4:circlizeの最初の例、3番目のトラックを追加します。
ここで、2番目のトラックに戻り、セクター”d”のセルを更新します。これはcircos.updatePlotRegion()
または短いバージョンcircos.update()
によって行われます。 この機能は、追加されたグラフィックスを消去します。circos.update()
は、セルのxlim
とylim
、およびセルの位置に関連する他の設定を変更することはできません。 circos.update()
“現在の”セルが更新したいものでない限り、セクタインデックスとトラックインデックスを明示的に指定する必要があります。 circos.update()
を呼び出した後、”現在の”セルは指定したセルにリダイレクトされ、低レベルのグラフィック関数を使用してグラフィックスを直接追加できます。(図を参照1.5)
circos.update(sector.index = "d", track.index = 2, bg.col = "#FF8080", bg.border = "black")circos.points(x = -2:2, y = rep(0.5, 5), col = "white")circos.text(CELL_META$xcenter, CELL_META$ycenter, "updated", col = "white")
図1.5:circlizeの最初の例、2番目のトラックを更新します。
次は新しいトラックを作成し続けます。 2番目のトラックに戻ってきましたが、新しいトラックを作成するときには、最も内側にあるトラックの後に新しいトラックが作成されます。 この新しいトラックでは、circos.rect()
によってヒートマップを追加します。 ここでは入力データを設定していませんが、ヒートマップはセル全体を最も左から右に、下から上に埋めるだけなので、ylim
引数を設定するだけです。 また、ylim
の正確な値は重要ではなく、x
、y
のpanel.fun()
は使用されません(実際には両方ともNULL
です)。 (図を参照1.6)
circos.track(ylim = c(0, 1), panel.fun = function(x, y) { xlim = CELL_META$xlim ylim = CELL_META$ylim breaks = seq(xlim, xlim, by = 0.1) n_breaks = length(breaks) circos.rect(breaks, rep(ylim, n_breaks - 1), breaks, rep(ylim, n_breaks - 1), col = rand_color(n_breaks), border = NA)})
図1.6:circlizeの最初の例で、4番目のトラックを追加します。
円の一番内側にはリンクやリボンが追加されています。 一点から点へのリンク、点から間隔へのリンク、または間隔から間隔へのリンクがあります。 セクション3.11は、リンクの詳細な使用法を提供します。 (図を参照1.7)
circos.link("a", 0, "b", 0, h = 0.4)circos.link("c", c(-0.5, 0.5), "d", c(-0.5,0.5), col = "red", border = "blue", h = 0.2)circos.link("e", 0, "g", c(-1,1), col = "green", border = "black", lwd = 2, lty = 2)
図1.7:circlizeの最初の例、リンクを追加します。
最後に、グラフィックパラメータと内部変数をリセットする必要があるので、次のプロットを台無しにすることはありません。
circos.clear()