可能很简单,但我是R(和堆叠)的新手......
似乎无法将汽车名称显示在我的条形图的x轴上。
我尝试粘贴"如何在R barplot中显示所有x标签中给出的示例?"问题但是没有用
我的代码如下。该代码是否适用于其他任何人?
#plot of efficiency of 4 cylinder cars
#get 4cylinder cars seperate
fourcyl <- subset(mtcars, cyl == "4")
#barplot in descending order... need to add in car names.
barplot(fourcyl$mpg[order(fourcyl$mpg, decreasing = TRUE)],
horiz=FALSE,
ylab = "Miles per Gallon",
main = "Efficiency for 4 cylinder vehicles",
ylim = c(0,35))
答案 0 :(得分:2)
@ Pascal的评论链接到两个可能的解决方案,但最重要的是你需要手动添加汽车名称。
要了解要使用的汽车名称,请执行以下操作:如果您查看mtcars
,您会看到它们没有出现在列标题下,这意味着它们是行名称。为了实现它们,只需:
carnames <- rownames(fourcyl)[ order(fourcyl$mpg, decreasing=TRUE) ]
从这里开始,您需要知道 和 添加它们。也许许多人看到的第一个地方是axis
,你可以在那里做类似的事情:
axis(side=1, at=1:length(carnames), labels=carnames)
但你至少对两个帐户感到失望:首先,你没有看到所有的名字,因为axis
礼貌地确保他们不会因为省略一些而重叠;第二,显示的那些在相应的垂直条下没有正确对齐。
要修复第一个,您可以尝试旋转文本。您可以使用las
(请参阅help(par)
)并执行以下操作:
axis(side=1, at=1:length(carnames), labels=carnames, las=2)
但是你会有点失望的是,很多名字都会超过默认的底部边缘(并消失)。您可以使用前面的par(mar=...)
进行修复(再次,请参阅其中的帮助并使用它来查找正确的参数),但是有一些解决方案可以提供更好的方法(美学上),其中两个在@Pascal的链接(真的,去那里)。
另一个问题 - 其中放置标签 - 通过阅读help(barplot)
来解决,并注意到来自barplot(...)
的返回值是提供中间位置的矩阵每个酒吧的点。奇怪,或许,但它就是它(它有一个很好的理由,某处)。因此,抓住这一点,你将几乎无家可归:
bp <- barplot(fourcyl$mpg[order(fourcyl$mpg, decreasing = TRUE)],
horiz=FALSE, ylab = "Miles per Gallon",
main = "Efficiency for 4 cylinder vehicles",
ylim = c(0,35))
现在,要复制其中一个链接的建议,请尝试:
text(x=bp[,1], y=-1, adj=c(1, 1), carnames, cex=0.8, srt=45, xpd=TRUE)
(无需axis
命令,只需bp <- barplot(...)
,carnames <- ...
和text(...)
。)