直方图(计数):更改y轴的比例

Liv*_*liv 3 r histogram scale

由于我想比较几个分布,我正在创建相同变量但不同年份的组合图.但是,y轴的比例会发生变化,因为频率的最高点每年都不同.我想创建直方图,其中所有y轴显示相同的范围,即使该点没有频率.

更确切地说,在一年中,分布的峰值是30个计数,在另一年中它是35,在图表上,30个看起来与另一个中的35个相同,因为y轴的比例变化.

我试过ylim =(35),但这只会导致错误"yli​​m的无效值".

谢谢!

Sil*_*ish 10

键入?hist到您的控制台查看的文档.你会看到ylim" 价值范围 ".有一个例子展示了如何ylim使用,hist(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")
Run Code Online (Sandbox Code Playgroud)

R中的直方图,有和没有设置ylim

因此,ylim适当设置使得直方图的并排比较更好.

实际上,只需找到数据集中最高峰并在您的数据集中使用它,就可以自动执行此操作ylim.你如何做到这一点取决于你是在构建一个频率直方图(除非你另有说明,否则R是等距的,R是自动的,除非你另有说明)或密度,但是一种方法是创建 - 但不是绘图 - 直方图对象和根据需要提取他们counts或他们的density.

#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")
Run Code Online (Sandbox Code Playgroud)

R中的并排直方图,具有频率或密度的自动y限制