如何在x轴上用重复的名字在条形图中写标签?

时间:2011-09-28 18:49:12

标签: r plot

我想制作一个简单的条形图,但我有一个问题,我在x轴上有重复的名称。因此,当我试图在x轴上写名时,它不会显示完整的字符串。我有以下数据

x <- c(1.8405917,0.3265986,1.5723623,464.7370299,0.0000000,3.2235716,
       3.1223534, 7.0999787, 1.7122258,3.2005524,3.7531266,469.4436828)

我正在使用barplot

barplot(x,xlab=c("AA/AA","AA/CC","AA/AC","AA/NC","CC/AA","CC/CC","CC/AC",
                 "CC/NC","AC/AA","AC/CC","AC/AC","AC/NC"))

但它不起作用。我也用过

axis()

但它不起作用。

提前致谢。

4 个答案:

答案 0 :(得分:21)

不,xlab用于为图的整个x轴提供标签,而不是标记单个条。

barplot()从绘制的矢量名称中获取条形的标签(或者可以导出到一组名称中的东西)。

> names(x) <- c("AA/AA", "AA/CC", "AA/AC", "AA/NC", "CC/AA", "CC/CC", "CC/AC",
+               "CC/NC", "AC/AA", "AC/CC", "AC/AC", "AC/NC")
> barplot(x)
> ## or with labels rotated, see ?par
> barplot(x, las = 2)

修改:@Aaron提及,barplot()还有一个names.arg来提供条形标签。这就是?barplot所说的:

  

names.arg:要在每个条形图或组的下方绘制的名称向量             酒吧。如果省略此参数,则会获取名称             来自names的{​​{1}}属性,如果这是一个向量,             或列名称,如果它是矩阵。

这解释了如果未提供height的默认行为 - 即从绘制的对象中获取名称。哪种用法对您最有用主要是品味问题。没有行/列/名称可能会稍微加快代码速度,但R的许多函数将直接从对象中获取names.arg属性(或类似的行名称),因此您不必继续为其提供标签绘制/标记结果等。

答案 1 :(得分:11)

xlab应为names.arg。有关详细信息,请参阅?barplot

答案 2 :(得分:3)

使用axis()的方法是捕获中点,这是barplot函数返回的内容。见?barplot

 mids <- barplot(x, xlab="")

 axis(1, at=mids, labels=c("AA/AA","AA/CC","AA/AC","AA/NC","CC/AA","CC/CC",
                           "CC/AC","CC/NC","AC/AA","AC/CC","AC/AC","AC/NC"), 
      las=3)

答案 3 :(得分:3)

试试这个:

barplot(x, cex.names=0.7,
        names.arg=c("AA/AA","AA/CC","AA/AC","AA/NC","CC/AA","CC/CC","CC/AC",
                    "CC/NC","AC/AA","AC/CC","AC/AC","AC/NC"))