簡體   English   中英

barplot 2條,一個堆疊,另一個不堆疊

[英]barplot 2 bars one stacked the other not

盡管存在一些類似的問題和我的研究,但我似乎無法解決我的小問題。 如果答案很簡單並且我很傻,請原諒....我有數據框

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

我想生成一個帶有2條的條形圖(x坐標上的國家名稱,y坐標上的國家數量)。 左欄應顯示德國,右欄應與其余4個國家/地區堆疊在一起。

請幫助,並非常感謝您!

解決此問題的一種方法是使用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"))

在此處輸入圖片說明

請注意,如果您不熟悉ggplot2 ,則只需要前兩行即可創建繪圖-其余的則是使它看起來不錯。 由於德國比您的其他國家大幾個數量級,因此如果不進行某種規模的擴展,這看起來將不會很好。 ggplot2具有許多內置的縮放命令,可能值得探討-在這里,我添加了平方根縮放,以便您可以使非德國國家/地區實際上按需堆疊。

ggplot2條形圖的文檔可以在這里找到-如果您正在尋找功能強大的繪圖工具,那絕對值得一讀。

有很多方法可以給貓咪剝皮,當您學習新工具時,您的確切問題經常會改變。 我可能不會以這種方式設置問題規范,而是盡可能地貼近您的數據和條形圖,實現我認為想要的一種方法是:

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

因此,我們在這里所做的工作是將德國和非德國的數字相加,然后將這些值與合理的x軸標簽一起傳遞給barplot函數。

您首先需要在數據中添加其他列:

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

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM