31

我很尴尬地问这个简单的问题,但是每当我创建一个情节时,我都会想好几天:

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 处。

在此处输入图像描述

我想自动化该过程,因为每当绘图大小更改默认标签行为更改时。见下图:

在此处输入图像描述

4

4 回答 4

43

从和参数?grid的描述:nxny

当为 NULL 时,默认情况下,网格与相应默认轴上的刻度线对齐(即,由 axTicks 计算的刻度线)

plot (x = 1:10, y = rnorm (10, 5, 2)) 
grid (NULL,NULL, lty = 6, col = "cornsilk2") 
于 2011-11-10T15:38:53.827 回答
24

作为参考,如果我们没有定义自定义刻度间隔,有一种方法可以直接从 plot() 命令控制网格和轴参数:

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)

网格示例

有关此线程此处用于网格对齐的自定义刻度间隔的更多信息。

于 2013-02-06T14:51:43.107 回答
7

对于后代,这是手动执行的冗长方法:

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")
于 2011-11-10T15:42:21.940 回答
1

尽管您可能不喜欢轴两端缺乏“自由空间”,但此处提供的答案要简单得多。简单来说,

问题是 grid 将 nx 网格线放在用户空间中,但 plot 在每一侧增加了 4% 的额外空间。你可以控制它。添加xaxs="i", yaxs="i"到您的情节将关闭额外的空间。但是然后你的右上角会被截断,所以你需要改变 xlim 和 ylim 的值并改变 nx 来匹配

于 2018-02-06T18:29:36.273 回答