2016-01-21 203 views
1

儘管有一些類似的問題和我的研究,我似乎無法解決我的小問題。請原諒如果答案是很容易的,我傻....我有一個數據幀barplot 2酒吧一堆疊其他不

df<-data.frame(X = c("Germany", "Chile","Netherlands","Papua New Guinea","Cameroon"), R_bar_Ger = c(1300000000, 620000, 550000, 400000, 320000))

我想產生barplot有2條(國家名稱上的X achsis,數量在y-achsis上)。 左側欄應顯示德國,右側應與其餘4個國家堆疊。

請提前幫助,非常感謝!

回答

5

一種方法來解決這個是通過使用ggplot2和一點操縱你的數據框。

首先,添加一列到您的數據幀指示哪個酒吧的國家應在(德國或不德國)繪製:

df$bar <- ifelse(df$X == "Germany", 1, 0) 

現在,創建情節:

ggplot(data = df, aes(x = factor(bar), fill = factor(X), y = R_bar_Ger)) + 
    geom_bar(stat = "identity") + 
    scale_y_sqrt() + 
    labs(x = "Country Group", title = "Square Root Scale", fill = "Country") + 
    scale_x_discrete(labels = c("Not Germany", "Germany")) 

enter image description here

需要注意的是,如果你不熟悉ggplot2,只有前兩行是必要的創建情節 - 別人都使我你看起來不錯。由於德國的數量比其他國家大得多,如果沒有某種程度的擴張,這種情況不會很好。 ggplot2有許多內置的縮放命令,可能值得探索 - 在這裏,我已經添加了平方根縮放比例,以便非德國國家可以根據需要實際進行堆疊。

ggplot2條形圖的文檔可以發現here - 這是絕對值得一讀,如果你正在尋找一個強大的繪圖工具。

+0

謝謝!這非常有幫助! – samyandi

2

皮膚貓有很多種方法,當你學習新工具時,你的確切問題經常會改變。我可能不會設置的問題說明了這種方式,但堅持儘可能靠近你的數據和barplot成爲可能,一個方式來實現什麼,我認爲你想要的是:

with(aggregate(R_bar_Ger ~ X=="Germany", data=df, sum), barplot(R_bar_Ger, names.arg=c("Other", "Germany"))) 

所以,我們在做什麼這裏是通過加法彙總德國和非德國的數字,然後將這些值與合理的x軸標籤一起傳遞給barplot函數。

2

你需要一個附加列第一添加到您的數據:

df$group <- ifelse(df$X=="Germany","Germany","Other") 

然後我們可以使用下面的方法ggplot

library(ggplot) 
qplot(x = factor(group), y = R_bar_Ger, data=df, geom = "bar", stat = "identity", fill = factor(X)) 

enter image description here

+0

這看起來很神奇,正是我一直在尋找的!我仍然收到錯誤消息,但我認爲這與我的R版本有關。將解決它。儘管這是一段很好的代碼。謝謝! – samyandi