直方图(计数):改变y轴的刻度

4

为了比较几个分布,我正在创建相同变量但不同年份的直方图。然而,由于频率的最高点每年不同,y轴的标度也会发生变化。我想创建直方图,使所有y轴显示相同的范围,即使该点没有频率。

更精确地说,有一年分布的峰值是30,另一年则是35。在图表中,30在另一个图表中看起来与35相同,因为y轴的刻度发生了变化。

我尝试了ylim=(35),但那只会导致错误:“ylim的值无效”。

谢谢!


2
你需要给出一个下限和上限... 尝试 ylim=c(0, 35)。 (你也可以让 ggplot 帮你完成一些工作... ggplot(yourdataframe, aes(yourvariable)) + geom_histogram() + facet_grid( . ~ year) - user20650
1个回答

14
在控制台中输入?hist以查看文档。你会看到ylim是用于“y值的范围”。有一个示例显示了如何使用ylimhist(x,freq = FALSE,ylim = c(0, 0.2))。在那里,你可以看到需要给ylim一个包含下限上限的向量。
对于直方图,你几乎总是希望下限为零(不这样做通常被认为是一种统计上的罪过)。所以正如上面的评论所指出的那样,你可以设置ylim=c(0,35)
以下是一个最小化示例:
#Sets frequencies with which x and y data will appear
yfreq <- c(1:10, 10:1) #frequencies go up to 10 and down again
xfreq <- c(1:7, rep(7, times=6), 7:1) #frequencies go up to 7 and down again

xdata <- rep(1:length(xfreq), times=xfreq)
ydata <- rep(1:length(yfreq), times=yfreq)

par(mfrow=c(2,2))
hist(ydata, breaks=((0:max(ydata)+1)-0.5), ylim=c(0,10),
     main="Hist of y with ylim set")
hist(xdata, breaks=((0:max(xdata)+1)-0.5), ylim=c(0,10),
     main="Hist of x with ylim set")
hist(ydata, breaks=((0:max(ydata)+1)-0.5),
     main="Hist of y without ylim set")
hist(xdata, breaks=((0:max(xdata)+1)-0.5),
     main="Hist of x without ylim set")

在R中设置ylim的直方图与未设置ylim的直方图

因此,适当设置ylim可以使直方图的并排比较效果更好。

实践中,通过自动查找两个数据集中最高峰并在ylim中使用它来完成这项工作非常方便。如何执行此操作取决于您是否构建频率直方图(如果您的间隔是等距的,则R会自动执行此操作,除非您另有指定)还是密度直方图,但一种方法是创建 - 但不绘制 - 直方图对象,并相应地提取它们的countsdensity

#Make histogram object but don't draw it
yhist <- hist(ydata, breaks=((0:max(ydata)+1)-0.5), plot=FALSE)
xhist <- hist(xdata, breaks=((0:max(xdata)+1)-0.5), plot=FALSE)

#Find highest count, use it to set ylim of histograms of counts
highestCount <- max(xhist$counts, yhist$counts)
hist(ydata, breaks=((0:max(ydata)+1)-0.5), ylim=c(0,highestCount),
     main="Hist of y with automatic ylim")
hist(xdata, breaks=((0:max(xdata)+1)-0.5), ylim=c(0,highestCount),
     main="Hist of x with automatic ylim")

#Same but for densities
highestDensity <- max(xhist$density, yhist$density)
hist(ydata, breaks=((0:max(ydata)+1)-0.5), 
     freq=FALSE, ylim=c(0,highestDensity),
     main="Hist of y with automatic ylim")
hist(xdata, breaks=((0:max(xdata)+1)-0.5),
     freq=FALSE, ylim=c(0,highestDensity),
     main="Hist of x with automatic ylim")

Side by side histograms in R with automatic y limits on frequency or density


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接