@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(...)
。)