非常に簡単な例として、mfrow=c(1,3)
を入力してください。各図は異なるヒストグラムです。 すべて 3フィギュアを横切った横線(abline(h=10)
に似ています)を描くにはどうすればよいですか? (つまり、それらの間のマージンさえも)明らかに、私は各図にアブラインを追加することができますが、それは私が望むものではありません。私はで実際にという数字を1つしか持たず、polygon
などを使ってそれぞれの数字を描くという非常に複雑な方法を考えることができます。それはばかげているでしょう。これを行う簡単な方法はありませんか?Rのマルチフィギュア環境にどのように線を描くのですか?
答えて
@joranが指摘したように、グリッドグラフィカルシステムをより柔軟に提供しています1つのデバイス上の複数のプロットの配置を制御します。
ここでは、y軸の高さ50の位置をに照会し、「正規化されたデバイス座標」の単位で照会します。 (すなわち、プロット装置の全高の割合として、0 =底部、および1 =上部)。次に、グリッドを使用して、(1)デバイスをいっぱいにするviewport
を押します。 (2)grconvertY()
によって返された高さの線をプロットする。
## Create three example plots
par(mfrow=c(1,3))
barplot(VADeaths, border = "dark blue")
barplot(VADeaths, border = "yellow")
barplot(VADeaths, border = "green")
## From third plot, get the "normalized device coordinates" of
## a point at a height of 50 on the y-axis.
(Y <- grconvertY(50, "user", "ndc"))
# [1] 0.314248
## Add the horizontal line using grid
library(grid)
pushViewport(viewport())
grid.lines(x = c(0,1), y = Y, gp = gpar(col = "red"))
popViewport()
EDIT:@joranは、第三プロットの最後のバーの端に第一プロットのy軸から延びているラインをプロットする方法を尋ねました。
library(grid)
library(gridBase)
par(mfrow=c(1,3))
# barplot #1
barplot(VADeaths, border = "dark blue")
X1 <- grconvertX(0, "user", "ndc")
# barplot #2
barplot(VADeaths, border = "yellow")
# barplot #3
m <- barplot(VADeaths, border = "green")
X2 <- grconvertX(tail(m, 1) + 0.5, "user", "ndc") # default width of bars = 1
Y <- grconvertY(50, "user", "ndc")
## Horizontal line
pushViewport(viewport())
grid.lines(x = c(X1, X2), y = Y, gp = gpar(col = "red"))
popViewport()
最後に、ここにほとんど同等の、より一般的に有用なアプローチです:ここでの選択肢のカップルです。あなたの助けのために
library(grid)
library(gridBase)
par(mfrow=c(1,3))
barplot(VADeaths); vps1 <- do.call(vpStack, baseViewports())
barplot(VADeaths)
barplot(VADeaths); vps3 <- do.call(vpStack, baseViewports())
pushViewport(vps1)
Y <- convertY(unit(50,"native"), "npc")
popViewport(3)
grid.move.to(x = unit(0, "npc"), y = Y, vp = vps1)
grid.line.to(x = unit(1, "npc"), y = Y, vp = vps3,
gp = gpar(col = "red"))
これは私が難しく考えずにできる最善である:
par(mfrow = c(1,3),xpd = NA)
for (i in 1:3){
x <- rnorm(200,i)
hist(x)
if (i == 1) segments(par("usr")[1],10,30,10)
}
私はラインをいじりせずに適切な場所で終わることを確認するかどうかはわかりません。各地域にセグメントをプロットすることでそれを解決できますが、高さを適切に整えるという問題を導入します。しかし、少なくともこれは良い出発点かもしれません。
私はこれがグリッドグラフィックスでより簡単だと思いますが、私は検証するためにいくつかの研究を行う必要があります。
ありがとう:それは機能の@ mdsumnerの答えににリンクされている記事のポール・マレルでデモを行っgrid.move.to()
とgrid.line.to()
を採用しています。 –
gung
ポール・マレルによってこの資料は、2つの別々のサブプロットのネイティブ空間で指定されたエンドポイントを有する2つの異なるこの場合には、座標系の線の間の線描画するgrid
グラフィックスの使用を示しています。
ポール・マレルを。グリッドグラフィックスパッケージ。 Rニュース、2(2):14-19、2002年6月
これは、PDF記事の17ページにあります:
ありがとう、私は記事を読んでいます。 – gung
ええ、その素晴らしいリンクをありがとう。 Murrellの記事で実証されている関数( 'grid.move.to()'と 'grid.line.to()')を使用して、私の答えに3番目のコードブロックを追加しました。 –
- 1. TBitmapの周囲に点線の境界線を描く?
- 2. PythonのチャンクからR環境のR環境にデータを渡す
- 3. のiOSのdrawRect境界線を描く
- 4. Unityのシェーダーでスプライトの境界線を外に描くにはどうすればいいですか?
- 5. 要素の境界線を描く(アニメーション)
- 6. 境界線のないグリッパーを描く
- 7. Rの環境
- 8. Rの新しい環境に `` ... ``をどうやって渡すのですか?
- 9. Graphvizで頂点のセットの周りに境界線を描く
- 10. CMDBuild環境をどのように配備できますか?
- 11. どのように丸い角のウィンドウに境界線を描画するのですか?
- 12. R:ある環境を別の環境にコピー/移動する
- 13. 州の境界を描くR
- 14. 矢印の形のマスクの周りに境界線を描く
- 15. 「かわいい」ベジェ曲線をどのように動的に描くか?
- 16. matplotlibに破線/点線の端でマーカーを描くにはどうすればよいですか?
- 17. ラファエルの紙の周りに境界線を描くJS
- 18. 主要なグリッド線の間に小さなグリッド線を描くにはどうすればよいですか?
- 19. このグラフに線形回帰直線を描くにはどうすればよいですか?
- 20. 線を描くにはどうしたらいいですか?
- 21. どのようにAeroがアクティブであるかのように境界線のないウィンドウを描画するように強制できますか?
- 22. GAEフレキシブル環境でデータストアのAPI環境を登録するにはどうすればよいですか?
- 23. CSSで特定の境界線を描画するにはどうすればよいですか?
- 24. シヌソイド線グラフを描くにはどうすればよいですか?
- 25. R内の関数内のローカル環境をどのように参照できますか?
- 26. 開発環境で、アセットをどのようにプリコンパイルするのですか?
- 27. 次のアーキテクチャをどのように描くのですか?
- 28. どのようにオートマトンの図を描くのですか?
- 29. 環境固有のバグをどのようにデバッグするのですか?
- 30. rsmを使用してperspの後に線を描くR
+1ニース!あなたは、ラインが緑色のバーの左端からy軸に沿って延びるようにユニット/座標/クリッピングをマッサージする方法を知っていますか? – joran
私は考えがあります、それがうまくいくなら、私はそれを追加します。今、私は太陽が沈む前に芝生を刈るために出かけています... –
ありがとう、これは本当に役立ちます! – gung