由于我想比较几种分布,我正在创建相同变量但不同年份的统计图。但是,y轴的比例变化,因为频率的最高点每年都不相同。我想创建直方图,即所有y轴显示相同的范围,即使没有频率的那个点。直方图(计数):y轴的变化比例
更确切地说,在一年内分布的峰值是30次计数,在另一年中是35次。因为y轴的比例发生变化,所以在图中,30与另一次中的35看起来相同。
我试过ylim =(35),但只会导致错误“ylim无效值”。
谢谢!
由于我想比较几种分布,我正在创建相同变量但不同年份的统计图。但是,y轴的比例变化,因为频率的最高点每年都不相同。我想创建直方图,即所有y轴显示相同的范围,即使没有频率的那个点。直方图(计数):y轴的变化比例
更确切地说,在一年内分布的峰值是30次计数,在另一年中是35次。因为y轴的比例发生变化,所以在图中,30与另一次中的35看起来相同。
我试过ylim =(35),但只会导致错误“ylim无效值”。
谢谢!
键入?hist
到您的控制台查看文档。你会看到ylim
是“... y值的范围”。举例说明如何使用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")
所以设置ylim
适当地使直方图工作的侧方比较好。
在实践中,只需找到两个数据集中的最高峰,然后在ylim
中使用它,实际上可以自动完成此操作。你如何做到这一点取决于你是否构造了一个频率直方图(这是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")
你需要给一个下限和上限....尝试'ylim = C(0,35)'。 (你也可以让'ggplot'为你做这些工作......'ggplot(yourdataframe,aes(yourvariable))+ geom_histogram()+ facet_grid(。〜year)' – user20650