在R中直方图条形上居中数值

11

希望在R中将x轴的值绘制在条形图的中心。

目前遇到了无法实现这一点的问题,以下是代码:

hist(sample_avg, breaks =7, ylim=c(0,2000), 
    main = 'Histogram of Sample Average for 1 Coin Flip', xlab= 'Sample Average')

这只是一个抛硬币的例子,我有6个可能的值,并且想要有6个桶,每个柱形图下面都有相应的x轴刻度标记。

非常感谢任何帮助。


5
处理离散结果时,您可以考虑使用barplot。默认的条形图还会将x轴标签居中放置在条形下方。 - BenBarnes
3个回答

13

hist()返回柱形图中间点的x坐标,存储在mids组件中,因此您可以这样做:

sample_avg <- sample(size=10000,x=seq(1,6),replace=TRUE)
foo <- hist(sample_avg, breaks =7, ylim=c(0,2000), 
    main = 'Histogram of Sample Average for 1 Coin Flip', xlab= 'Sample Average',
    xaxt="n")
axis(side=1,at=foo$mids,labels=seq(1,5))

4
# when dealing with histogram of integers, 
# then adding some residual ~ 0.001 will fix it all...
# example:
v = c(-3,5,5,4,10,8,8)
a = min(v)
b = max(v)
foo = hist(v+0.001,breaks=b-a,xaxt="n",col="orange",
panel.first=grid(),main="Histogram of v",xlab="v")
axis(side=1,at=foo$mids,labels=seq(a,b))

0

尝试过了,但每次都会截断最后一个值。你知道有什么方法可以解决这个问题吗?我尝试过调整长度,但发现我的“at”和“labels”相差1。 - ShortMyCDS
1
没关系,我用 $mids 解决了。感谢所有的帮助! - ShortMyCDS
你可以直接指定断点,使用 breaks=seq(0.5,6.5) 而不是 breaks=7,这样可能会得到更好的结果。 - Stephan Kolassa

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