2

別の投稿で @Justin の助けを借りて、ggplot2 のfacet_gridオプションを使用してシミュレーション結果をプロットしました。データと回答を含む投稿はこちら: facet_grid オプションを使用して、ggplot2 でデータフレームの列をプロットする

以下は、各パラメーター タイプの scale_x の最小値と最大値に関する情報が追加された元のサンプル データのコピーです。

dat <- read.table(textConnection("P1 P2 P3 P4 R
1 2e-5 1.0 0.6 3 1
2 4e-6 1.5 0.7 1.5 2
3 6e-7 1.2 0.6 2.5 3 
4 8e-8 1.45  0.65 3.2 4
"))

scalx <- read.table(textConnection("P XMIN XMAX
1 1 10e-1 10e-10
2 2 0.5 3.0
3 3 0.0 1.5
4 4 2.0 5.0
"))

実際のプロット例のために@justinによって提供されたコード:

library(ggplot2)
library(reshape2)
dat.melt <- melt(dat, id.vars='R')

ggplot(dat.melt, aes(x=0, y=value)) +
    geom_boxplot() +
    geom_point(aes(colour=factor(R))) +
    facet_wrap(~variable, ncol=1, scales='free') +
    coord_flip()

しかし今、私のプロジェクトは、複数のシミュレーション結果の進化を示す小さなフィルムを作成することです。現時点では、上記のコードの助けを借りて、このような素晴らしいグラフィックを取得しています。

ここに画像の説明を入力

これを可能にするには、ファセットごとに値を修正する必要があります。これは、各パラメーターが固定された極端な値の間で変動する可能性があるためです。ただし、それらの値はファセットごとに異なります。

facet_grid最近、github ggplot2 プロジェクト リポジトリのさまざまなファセットでさまざまな制限を指定することに関連するこの問題を見つけたので、それが可能かどうか知っていますか: https://github.com/hadley/ggplot2/issues/187。これを可能にする別の代替ソリューションはありますか?

4

1 に答える 1

2

各ファセットのスケールを拡張したい (そしてそれらを制限/縮小したくない) ので、それは可能です。scalxあなたのmeltedに似たフォーマットにあなたを再形成する必要がありますdat:

xlims <- melt(scalx, id.vars="P")
xlims$P <- paste0("P", xlims$P)
names(xlims)[1] <- "variable"

に加えてmelt、ファセットの形式と変数名を同じにしました。次に、この新しいデータ フレームをgeom_blankレイヤーに指定して、スケールの制限に影響を与えることができますが、実際には何も描画しません。

ggplot(dat.melt, aes(x=0, y=value)) +
    geom_boxplot() +
    geom_point(aes(colour=factor(R))) +
    geom_blank(data=xlims) +
    facet_wrap(~variable, ncol=1, scales='free') +
    coord_flip()

ここに画像の説明を入力

ちなみに、最小値は 2 と記載されていますP4が、実際のデータ ポイントは 1.5 です。これは、このアプローチがスケールを縮小するのではなく拡大するだけであることを示しています。

于 2012-06-11T19:36:06.010 に答える