绘制数据后面的网格,而不是R中的前面

RWJ*_*RWJ 24 plot r

我喜欢在绘图时生成自己的网格线,因此我可以控制刻度线等等.我正在使用'hist'绘图程序来解决这个问题.

    hist(WindSpeed, breaks=c(0:31), freq=TRUE, col="blue", xaxt="n", yaxt="n", xlab="Wind Speed (m/s)",main="Foo", cex.main=1.5, cex.axis=1, cex.lab=1, tck=1, font.lab=2)
    axis(1, tck=1, ,col.ticks="light gray")
    axis(1, tck=-0.015, col.ticks="black")
    axis(2, tck=1, col.ticks="light gray", lwd.ticks="1")
    axis(2, tck=-0.015)
    minor.tick(nx=5, ny=2, tick.ratio=0.5)
    box()
Run Code Online (Sandbox Code Playgroud)

情节: 在此输入图像描述

然后我就可以使用'lines'或'points'命令在其他类型的图上重新绘制数据,但是直方图并不那么容易.

任何帮助都会很棒.

我在下面添加了我的代码并根据John的回复图像...

我在下面添加了我的代码并根据John的回复图像...

hist(WindSpeed, breaks=30, freq=TRUE, col="blue", xaxt="n", yaxt="n", xlab="Wind Speed (m/s)",main="Foo", cex.main=1.5, cex.axis=1, cex.lab=1, font.lab=2)
axis(1, tck=1, col.ticks="light gray")
axis(1, tck=-0.015, col.ticks="black")
axis(2, tck=1, col.ticks="light gray", lwd.ticks="1")
axis(2, tck=-0.015)
minor.tick(nx=5, ny=2, tick.ratio=0.5)
box()
hist(WindSpeed, add=TRUE, breaks=30, freq=TRUE, col="blue", xaxt="n", yaxt="n", xlab="Wind Speed (m/s)", main="Foo", cex.main=1.5, cex.axis=1, cex.lab=1, font.lab=2)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Aar*_*ica 28

实际上,R有办法做到这一点!它的panel.first参数plot.default,它hist要求做的大部分工作.它需要一个表达式,在设置绘图轴之后但在进行任何绘图之前进行评估.这对于绘制背景网格或散点图光滑度非常有用,"引用?plot.default.

hist(WindSpeed, breaks=c(0:31), freq=TRUE, col="blue", xaxt="n", yaxt="n", 
     xlab="Wind Speed (m/s)", main="Foo", 
     cex.main=1.5, cex.axis=1, cex.lab=1, tck=1, font.lab=2,
     panel.first={
        axis(1, tck=1, col.ticks="light gray")
        axis(1, tck=-0.015, col.ticks="black")
        axis(2, tck=1, col.ticks="light gray", lwd.ticks="1")
        axis(2, tck=-0.015)
        minor.tick(nx=5, ny=2, tick.ratio=0.5)
        box()
 })
Run Code Online (Sandbox Code Playgroud)

请参阅如何使用数据后面的abline()绘制网格线?对于另一个使用此方法的问题.


Joh*_*ohn 16

这相对容易.

生成直方图但不绘制它.

h <- hist(y, plot = FALSE)
Run Code Online (Sandbox Code Playgroud)

现在生成基础图...我添加了一些功能,使其看起来更像标准的历史图

plot(h$mids, h$counts, ylim = c(0, max(h$counts)), xlim = range(h$mids)*1.1, 
    type = 'n', bty = 'n', xlab = 'y', ylab = 'Counts', main = 'Histogram of y')
Run Code Online (Sandbox Code Playgroud)

添加你的网格

grid()
Run Code Online (Sandbox Code Playgroud)

添加你的直方图

hist(y, add = TRUE)
Run Code Online (Sandbox Code Playgroud)

或者,正如我通过这个过程发现的......你可以更轻松地完成它

hist(y)
grid()
hist(y, add = TRUE, col = 'white')
Run Code Online (Sandbox Code Playgroud)

最后一种方法只是重绘网格上的直方图.


jor*_*ran 8

在R中,当您绘制时,顺序很重要.正如您所发现的那样,在绘图中添加内容会增加您之前绘制的内容.所以我们需要一种方法来首先绘制网格,然后绘制直方图.尝试这样的事情:

plot(1:10,1:10,type = "n")
grid(10,10)
hist(rnorm(100,5,1),add = TRUE)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我没有重新创建你的例子,因为它不可重复,但这个一般的想法应该有效.但关键的想法是使用type = "n"选项to创建具有正确尺寸的空图plot,然后添加网格,然后使用add = TRUE参数添加直方图.

请注意,add参数实际上是for plot.histogram,hist将其传递给via ....