R制作具有相等宽度和断裂次数的直方图

时间:2013-03-06 21:27:52

标签: r ggplot2

我一直无法使我的R图的图形具有相等的宽度和断点数。

目前,我有

hist(result1,xlim=c(2,4),breaks=10)
abline(v=pi,col="red")
hist(result2,xlim=c(2,4),breaks=10)

我试图用相同的轴条#条和相同的条形宽度将两个图形叠加在一起。

奇怪的是,当我设置break = 10时,顶部图形偶尔会有比底部更多的条形,它们的宽度不相等。我没有正确理解break参数吗?

3 个答案:

答案 0 :(得分:3)

我猜你用两个直方图绘制了两个直方图:

par(mfrow=c(2,1))

对于固定休息,我建议:

bins <- seq(2, 4, by=0.1)

hist(results1, breaks=bins, xlim=c(2,4))
hist(results2, breaks=bins, xlim=c(2,4))

答案 1 :(得分:3)

我认为使用ggplot2分面很适合这种情节。让我们创建一些数据:

carat1 = diamonds
carat1$id = "one"
carat2 = diamonds
carat2$id = "two"
carat2 = within(carat2, { carat = carat * 1000 })
carat_comb = rbind(carat1, carat2)

让我们制作一个情节:

ggplot(aes(x = carat), data = carat_comb) + 
    geom_histogram() + facet_wrap(~ id, ncol = 1)

enter image description here

为了使这个图在x轴完全不同时工作,告诉ggplot轴值可以独立确定:

ggplot(aes(x = carat), data = carat_comb) + geom_histogram() + 
    facet_wrap(~ id, ncol = 1, scales = "free_x")

enter image description here

答案 2 :(得分:2)

我总是发现你描述的问题也很难处理,一般来说,如果你的数据非常不同,你可能无法做到你想要的。即便如此,使用ggplot2图形版本可能会有更好的运气:

library('ggplot2')
qplot(x = carat, data = diamonds, geom = "histogram", binwidth = 0.1)

如果这种方法适合您,您可以执行以下操作以获得两个图,一个在另一个之上:

library('grid')
a <- qplot(x = carat, data = diamonds, geom = "histogram", binwidth = 0.1)
b <- qplot(x = carat, data = diamonds, geom = "histogram", binwidth = 0.1)

vplayout <- function(x, y) viewport(layout.pos.row = x, layout.pos.col = y)
grid.newpage()
pushViewport(viewport(layout = grid.layout(2, 1)))
print(a, vp = vplayout(1,1))
print(b, vp = vplayout(2,1))