1

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

目前,我有

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

我正在尝试将 2 个图形叠加在一起,它们具有相同的条形轴 # 和相同的条形宽度。

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

4

3 回答 3

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))
于 2013-03-06T21:59:56.963 回答
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)

在此处输入图像描述

当 x 轴完全不同时,要使这个绘图起作用,就是告诉 ggplot 轴值可以独立确定:

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

在此处输入图像描述

于 2013-03-06T22:02:41.963 回答
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))
于 2013-03-06T21:46:27.183 回答