This question already has answers here:
How to display all x labels in R barplot?

(4个答案)


5年前关闭。




可能非常简单,但我是R(和堆栈)的新手...

似乎无法让汽车名称显示在我的barplot的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))

最佳答案

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

10-08 00:29