2017-10-21 54 views
0

我想ra-安排我的ggplot條形圖的條形 - 在這裏有很多類似的條目在stackoverflow上(例如here)。只使用一個變量(無值或排名)在ggplot2條形圖中重排條形圖?

但是,我的問題是:你可以通過告訴ggplot不要按標籤按字母順序進行排序,而只用一個變量(用於條形圖的變量)進行此操作,但可以通過將相同標籤的計數值作爲值出於興趣。

就我而言,我有一個調查數據,說明哪個政黨在某個問題領域中最能勝任某個問題的問題。

respondent-id competence 
1    "Party A" 
2    "Party A" 
3    "Party B" 
4    "Party B" 
5    "Party B" 
6    "Party C" 

什麼ggplot現在會做的是與第二高的第一(甲方)的條形圖,最高的第二方(乙方)與去年最低(丙方)。但是,我該如何告訴ggplot考慮計數(2:3:1 - >先放置B方)?

我試過幾種方法的建議here,但這並沒有解決這個問題:他們大多包括一個位置變量,它會告訴ggplot「指定乙方第一名」。我也試圖簡單地通過「能力」來reorder(),但沒有成功。最後,我可以爲各方分配不同的前綴(「1_party_B」,「2 _...」),但那將是非常繁瑣的工作。

ggplot(MyData, aes(x=competence,y=(..count..))) + geom_bar() 

另外,我有一個NA-酒吧在我的條形圖和MyData[,c("competence")]似乎沒有這樣的伎倆。但這是另一回事。

在此先感謝!

+0

首先,你必須創建具有計數另一個表,然後繪製出來。使用'table()'爲每個參與者準備計數表 –

回答

1
library(ggplot2) 

df 
# resp comp 
# 1 1 Party A 
# 2 2 Party A 
# 3 3 Party B 
# 4 4 Party B 
# 5 5 Party B 
# 6 6 Party C 

df1 <- data.frame(table(df$comp)) 
df1 
#  Var1 Freq 
# 1 Party A 2 
# 2 Party B 3 
# 3 Party C 1 

手動安排使用水平factor()

df1$Var1 <- factor(df1$Var1, c("Party B", "Party C", "Party A")) 
df1 
#  Var1 Freq 
# 2 Party B 3 
# 3 Party C 1 
# 1 Party A 2 


ggplot(df1, aes(x = Var1, y = Freq)) + geom_bar(stat = "identity") 

enter image description here

頻率黨的遞減順序

df1 <- data.frame(table(df$comp)) 
df1 
#  Var1 Freq 
# 1 Party A 2 
# 2 Party B 3 
# 3 Party C 1 

df1 <- df1[order(df1$Freq, decreasing=TRUE),] 
df1 
#  Var1 Freq 
# 2 Party B 3 
# 1 Party A 2 
# 3 Party C 1 

ggplot(df1, aes(x = Var1, y = Freq)) + geom_bar(stat = "identity") 

enter image description here

0

取決於如果你想有一個從大到小的順序上,你可以做到這一點簡單地用dplyrreorder

library(dplyr) 
library(ggplot2) 

count(df, competence) %>% 
     ggplot(aes(x = reorder(competence, -n), y = n)) + 
     geom_col() 

enter image description here