如何在R barplot中显示所有x标签?

时间:2012-04-02 18:38:57

标签: r graph

这是一个基本问题,但我无法找到答案。我在一个面板中生成大约9个条形图,每个条形图大约有12个条形图。我在输入中提供了所有12个标签,但R仅命名备用条。这显然是由于R中的某些默认设置需要更改但我无法找到它。

4 个答案:

答案 0 :(得分:29)

如果您在las=2电话中使用plot(),则可能会显示所有标签。否则,您需要使用xaxt="n",然后通过单独调用axis(1, at= ..., labels=...)来放置标签。

另一种方法是首先收集中点,然后使用带有xpd和srt的text()来控制文本旋转的程度:

text(x=midpts, y=-2, names(DD), cex=0.8, srt=45, xpd=TRUE)

需要使用绘制区域中的坐标来选择y值。

答案 1 :(得分:17)

要在基础R条形图上获得旋转标签,您可以(就像我在这里一样)调整其中一个 gridBase 包的插图中给出的示例:

library(grid)
library(gridBase)

## Make some data with names long enough that barplot won't print them all
DD <- table(rpois(100, lambda=5))
names(DD) <- paste("long", names(DD), sep="_")

## Plot, but suppress the labels
midpts <- barplot(DD, col=rainbow(20), names.arg="")

## Use grid to add the labels    
vps <- baseViewports()
pushViewport(vps$inner, vps$figure, vps$plot)

grid.text(names(DD),
    x = unit(midpts, "native"), y=unit(-1, "lines"),
    just="right", rot=50)

popViewport(3)

enter image description here

答案 2 :(得分:2)

如果标签太大,R不会标记每个条。

我建议尝试通过将las = 2参数传递到绘图函数来垂直旋转标签。

如果标签仍然太大,则可以尝试使用cex.names = .5参数缩小字体。

情节的样本数据

sample_curve <- c(2.31,2.34,2.37,2.52,2.69,2.81,2.83,2.85,2.94, 3.03,  3.21,  3.33)   # create a sample curve
names(sample_curve)<-c("1 MO","2 MO","3 MO","6 MO","1 YR","2 YR","3 YR","5 YR","7 YR","10 YR","20 YR","30 YR") # label the curve

标签太大的情节示例

barplot(sample_curve) # labels too big for the plot

labels too big

标签旋转且尺寸较小的情节示例

barplot(sample_curve, las=2, cex.names=.5) # lables are rotated and smaller, so they fit

rotated and smaller

答案 3 :(得分:0)

在绘制 barplot() 之前

您可以简单地使用 par() 和您的边距值增加边距(您的图有 4 个边距)mar = c(v1,v2,v3,V4)

par(mar=c(10,4,4,4))

例如:

par(mar=c(10,4,4,4))
barplot(height=c(1,5,8,19,7),
        names.arg=c("very long label 1","very long label 2",
                    "very long label 3","very long label 4",
                    "very long label 5"), las=2 )

Very long labels Barplot