2015-08-13 331 views
1

可能很簡單,但我是一個新手R(和堆棧)...如何在R Barplot中顯示x軸標籤?

似乎無法得到汽車名稱顯示在我的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)) 
+0

我複製了他提供的代碼,但即使該boxplot在運行時也沒有任何x軸標籤... –

回答

2

@帕斯卡的評論鏈接到兩種可能的解決方案,但底線是你需要手動添加汽車名稱。

要知道車名使用需要第一步:如果你看一下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(...)。)

+0

非常感謝您的詳細解答。有效。在這一天的大部分時間裏都在爲此而掙扎。非常感謝您的回覆。 –

+0

有時候人們更喜歡比'barplot'提供更多的控制,所以他們需要恢復手動製作條形圖。我在[SO#30794373](http://stackoverflow.com/questions/30793211/align-barplot-with-boxplot-in-r/30794373#30794373)中建議(使用更多功能)回答不同的問題如果你好奇的話,那就是'plot'和'rect'。 – r2evans