R barplot轴缩放

时间:2011-11-27 13:04:30

标签: r plot scale axis-labels

我想用一些x轴标签绘制一些数据的条形图,但到目前为止我只是遇到了同样的问题,因为轴缩放是完全不受限制的,因此我的标签错误地位于条形下方。 我能想到的最简单的例子:

x = c(1:81)
barplot(x)
axis(side=1,at=c(0,20,40,60,80),labels=c(20,40,60,80,100))

正如您所看到的,x轴不会沿整个绘图延伸,而是在两者之间的某处停止。在我看来好像问题很简单,但我不知道我无法解决它,到目前为止我找不到任何解决方案:(

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:12)

问题在于barplot实际上是为绘制分类而不是数字数据而设计的,因此在设置水平轴刻度方面几乎可以做到这一点。解决这个问题的主要方法是通过将barplot的结果保存到变量来恢复条形中点的实际x位置,但正如您在下面看到的,我还没有想出一个优雅的方法在基础图形中做你想做的事。也许其他人可以做得更好。

x = c(1:81)
b <- barplot(x)
## axis(side=1,at=c(0,20,40,60,80),labels=c(20,40,60,80,100))
head(b)

你可以在这里看到实际的中点位置是0.7,1.9,3.1,...... - 不是1,2,3 ......

这很快,如果你不想将轴从0扩展到100:

b <- barplot(x)
axis(side=1,at=b[c(20,40,60,80)],labels=seq(20,80,by=20))

这是我在基础图形中做到的最佳镜头:

b <- barplot(x,xlim=c(0,120))
bdiff <- diff(b)[1]
axis(side=1,at=c(b[1]-bdiff,b[c(20,40,60,80)],b[81]+19*bdiff),
              labels=seq(0,100,by=20))

你可以试试这个,但是这些酒吧不是很漂亮:

plot(x,type="h",lwd=4,col="gray",xlim=c(0,100))

ggplot

library(ggplot2)
d <- data.frame(x=1:81)
ggplot(d,aes(x=x,y=x))+geom_bar(stat="identity",fill="lightblue",
                   colour="gray")+xlim(c(0,100))

大多数统计图形书呆子都会告诉你,使用点或线而不是条形图(非数据墨水,Tufte,等等等等)可以更好地绘制定量(x,y)数据图形

答案 1 :(得分:1)

不确定你的确是什么,但是如果要让标签从一端到另一端均匀地运行(但不一定准确),那么:

x = c(1:81)
bp <- barplot(x)
axis(side=1,at=bp[1+c(0,20,40,60,80)],labels=c(20,40,60,80,100))

对我而言,这就是为什么你想在0处标记“20”的原因。但这是一种方法。