Rでの循環可視化

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$xdf$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)
circlizeの最初の例では、最初のトラックを追加します。

図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.indextrack.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)
circlizeの最初の例では、2番目のトラックを追加します。

図1.3: Circlizeの最初の例では、2番目のトラックを追加します。

3番目のトラックとpanel.funでは、各セルで10個のデータポイントをランダムに選択し、x値で並べ替えて線で接続しました。 Followingcodeでは、circos.track()sectors(最初の名前のない引数)、xy引数が設定されている場合、x値とy値はdf$sectorsで分割され、xとy値の対応するサブセットはpanel.funからpanel.funxy引数に送信されます。 したがって、xypanel.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)})
circlizeの最初の例は、第三のトラックを追加します。

図1.4:circlizeの最初の例、3番目のトラックを追加します。

ここで、2番目のトラックに戻り、セクター”d”のセルを更新します。これはcircos.updatePlotRegion()または短いバージョンcircos.update()によって行われます。 この機能は、追加されたグラフィックスを消去します。circos.update()は、セルのxlimylim、およびセルの位置に関連する他の設定を変更することはできません。 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")
circlizeの最初の例では、2番目のトラックを更新します。

図1.5:circlizeの最初の例、2番目のトラックを更新します。

次は新しいトラックを作成し続けます。 2番目のトラックに戻ってきましたが、新しいトラックを作成するときには、最も内側にあるトラックの後に新しいトラックが作成されます。 この新しいトラックでは、circos.rect()によってヒートマップを追加します。 ここでは入力データを設定していませんが、ヒートマップはセル全体を最も左から右に、下から上に埋めるだけなので、ylim引数を設定するだけです。 また、ylimの正確な値は重要ではなく、xypanel.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)})
circlizeの最初の例は、第四のトラックを追加します。

図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)
circlizeの最初の例は、リンクを追加します。

図1.7:circlizeの最初の例、リンクを追加します。

最後に、グラフィックパラメータと内部変数をリセットする必要があるので、次のプロットを台無しにすることはありません。

circos.clear()

コメントを残す

メールアドレスが公開されることはありません。