2011-09-28 57 views
13

我想制作一个简单的barplot,但我有一个问题,我在x轴上重复了名称。所以,当我尝试在x轴上写名字时,它不会显示完整的字符串。我有以下数据如何在带有重复名称的x轴上的barplot中书写标签?

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() 

但是它不起作用。

在此先感谢。

+0

你收到任何错误讯息? – 2011-09-28 18:53:39

回答

20

不,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属性height获取名称 ,如果它是矢量,则为 ,如果是矩阵,则为名称。

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

+0

+1尼斯完整答案。 – Aaron

10

xlab应该是names.arg。有关详细信息,请参见?barplot

+0

+1注意'names.arg'参数。 –

2

使用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

试试这个:

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"))