bon*_*tus 5 plot r 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))
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,x轴不会沿整个绘图延伸,而是在两者之间的某处停止.在我看来好像问题很简单,但我不知何故我无法解决它,到目前为止我找不到任何解决方案:(
任何帮助是极大的赞赏.
Ben*_*ker 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)
Run Code Online (Sandbox Code Playgroud)
你可以在这里看到实际的中点位置是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))
Run Code Online (Sandbox Code Playgroud)
这是我在基础图形中执行此操作的最佳方法:
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))
Run Code Online (Sandbox Code Playgroud)
你可以尝试这个,但酒吧不是很漂亮:
plot(x,type="h",lwd=4,col="gray",xlim=c(0,100))
Run Code Online (Sandbox Code Playgroud)
或者在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))
Run Code Online (Sandbox Code Playgroud)
大多数统计图形书呆子会告诉你图形定量(x,y)数据最好用点或线而不是条形图(非数据墨水,Tufte,blah blah blah :-))
不确定你到底想要什么,但如果是让标签从一端均匀地分布到另一端(但不一定准确),那么:
x = c(1:81)
bp <- barplot(x) # returns centered x axis positions as matrix
axis(side=1,
at=bp[1+c(0,20,40,60,80)], # Need to increment, R uses 1-based indices
labels=c(20,40,60,80,100))
Run Code Online (Sandbox Code Playgroud)
我的困惑是为什么你想在 0 处标记“20”。但这是一种方法。
我认为 Ben 关于 x 轴用于(有序)类别的说法基本上是正确的,但我不太同意 y 值是分类的。