2011-09-28 55 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"))