web-dev-qa-db-ja.com

軸の目盛りと一致するグリッド線

私はこの単純な質問に恥ずかしく思いますが、プロットを作成するたびに数日間心を痛めています。

plot (x = 1:10, y = rnorm (10, 5, 2))
grid (10,10, lty = 6, col = "cornsilk2")

軸がラベル付けされている場所、つまり、x軸の2、4、6、8、10、およびy軸の3、4、5、6、7、8にグリッドを配置します。

enter image description here

プロットサイズがデフォルトのラベルの動作を変更するたびにプロセスを自動化したい。次のプロットを参照してください。

enter image description here

26
jon

nxおよびny引数の?grid記述から:

NULLの場合、デフォルトでは、グリッドは対応するデフォルト軸の目盛り(つまり、axTicksによって計算された目盛り)と整列します。

plot (x = 1:10, y = rnorm (10, 5, 2)) 
grid (NULL,NULL, lty = 6, col = "cornsilk2") 
37
joran

参考までに、カスタムティック間隔を定義していない場合は、plot()コマンドからgridおよびaxesパラメーターを直接制御する方法があります。

plot(x = 1:10, y = rnorm(10, 5, 2), xlim=c(1, 10), ylim=c(1, 10), panel.first=grid())

Plot.default()のドキュメントには、これらのパラメーターに関する詳細情報が記載されています。

カスタムティック間隔を使用する場合、最も簡単なのはablineを使用してグリッドを描画することです。

plot(x = 1:10, y = rnorm(10, 5, 2), xaxp=c(1, 10, 10), yaxp=c(1, 10, 10), axes=FALSE)
axis(1, 1:10)
axis(2, 1:10)
abline(h=1:10, v=1:10, col="gray", lty=3)

grid example

this thread および here のグリッドアライメントのカスタムティック間隔の詳細。

20
Robert Kubrick

後世のために、手作業でそれを行うための長い方法があります:

plot (x = 1:10, y = rnorm (10, 5, 2))
grid (lty = 6, col = "cornsilk2")

xaxp <- par("xaxp")
yaxp <- par("yaxp")

abline(v=seq(xaxp[1], xaxp[2], (xaxp[2]-xaxp[1])/xaxp[3]), lty=6, col = "cornsilk2")
abline(h=seq(yaxp[1], yaxp[2], (yaxp[2]-yaxp[1])/yaxp[3]), lty=6, col = "cornsilk2")
5
Andrie

here の答えははるかに簡単ですが、軸の両端に「空きスペース」がないことを嫌うかもしれません。簡単に言えば、

問題は、グリッドがnxグリッド線をユーザー空間に配置しているのに、プロットが両側に4%の余分な空間を追加していることです。これを制御できます。 xaxs="i", yaxs="i"をプロットに追加すると、余分なスペースがオフになります。ただし、右上のポイントは切り取られるため、xlimとylimの値を変更し、nxを一致するように変更する必要があります

1
Carl Witthoft