我喜欢在绘图时生成自己的网格线,因此我可以控制刻度线等等。我正在使用'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()
简介:
然后我就可以使用'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)
答案 0 :(得分:27)
实际上,R有办法做到这一点!它是panel.first
的{{1}}参数,plot.default
调用它来执行大部分工作。它需要一个表达式,在设置绘图轴之后但在进行任何绘图之前进行评估。这对于绘制背景网格或散点图光滑度非常有用,“引自hist
。
?plot.default
有关使用此方法的其他问题,请参阅How do I draw gridlines using abline() that are behind the data?。
答案 1 :(得分:16)
这相对容易。
生成直方图,但不绘制它。
h <- hist(y, plot = FALSE)
现在生成基础图...我添加了一些功能,使其看起来更像标准的历史记录
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')
添加你的网格
grid()
添加直方图
hist(y, add = TRUE)
或者,正如我通过这个过程发现的......你可以做得更轻松
hist(y)
grid()
hist(y, add = TRUE, col = 'white')
最后一种方法只是在网格上重绘直方图。
答案 2 :(得分:8)
在R中,当您绘制时,顺序很重要。正如您所发现的那样,在绘图中添加内容会增加您之前绘制的内容。所以我们需要一种方法来绘制网格首先然后绘制直方图。尝试这样的事情:
plot(1:10,1:10,type = "n")
grid(10,10)
hist(rnorm(100,5,1),add = TRUE)
我没有重新创建你的例子,因为它不可重复,但这个一般的想法应该有效。但关键的想法是使用type = "n"
plot
选项创建一个具有正确尺寸的空图,然后添加网格,然后使用add = TRUE
参数添加直方图。
请注意,add
参数实际上是plot.histogram
,hist
通过...
传递。
答案 3 :(得分:4)
@joran建议的基本图形解决方案很好。备选方案:
d <- data.frame(x=rnorm(1000))
library(lattice)
histogram(~x,data=d,panel=function(...) {
panel.grid(...)
panel.histogram(...) }
)
或者:
library(ggplot2)
qplot(x,data=d,geom="histogram",binwidth=0.1)+theme_bw()+
labs(x="Wind speed", y="Frequency")
(但当然你必须学习调整标签,标题等的所有细节......我真的不确定如何在ggplot
中做标题......)
答案 4 :(得分:1)
背景中网格线的另一种方法:
A)
hist( y, panel.first=grid() ) # see: help( plot.default )
box()
B)
plot.new() # new empty plot
nv <- length( pretty(x) ) - 1 # number of vertical grid lines (or set by hand)
nh <- length( pretty(y) ) - 1 # number of horizontal grid lines (or set by hand)
grid( nx = nv, ny = nh ) # preplot grid lines
par( new = TRUE ) # add next plot
plot( x, y ) # plot or hist, etc
box() # if plot hist
背景中任意行与abline:
C)
How do I draw gridlines using abline() that are behind the data?
d)
# first, be sure there is no +/-Inf, NA, NaN in x and y
# then, make the container plot with two invisible points:
plot( x = range( pretty( x ) ), y = range( pretty( y ) ), type = "n", ann = FALSE )
abline( h = hlines, v = vlines ) # draw lines. hlines, vlines: vectors of coordinates
par( new = TRUE ) # add next plot. It is not necessary with points, lines, segments, ...
plot( x, y ) # plot, hist, etc
box() # if plot hist