R_tips_2: 柱狀圖排序問題

1. 問題描述


使用ggplot繪制柱狀圖時淮野,我們可能需要對柱進(jìn)行排序,例如献幔,我們想探究看電視的平均時長和宗教信仰之間的關(guān)系:

# 生成數(shù)據(jù)
relig_summary <- gss_cat %>%
  group_by(relig) %>%
  summarise(
    age = mean(age, na.rm = TRUE),
    tvhours = mean(tvhours, na.rm = TRUE),
    n = n()
  )

# 繪制
ggplot(relig_summary, aes(tvhours, relig)) + geom_col(width = .7, alpha = .7, color = "black")
Fig.1

由于柱子排布沒有明顯規(guī)律妆毕,所以圖非常難解讀。因此痹届,我們期望對柱子排序進(jìn)行調(diào)整呻待。
由于柱子排序,取決于Y軸上作為因子型變量的宗教順序队腐,所以蚕捉,我們可以調(diào)整relig的因子順序,也就是該變量的levels柴淘。

2. 解決方案


2.1 fct_reorder()

使用fct_reorder命令迫淹,它包含三個參數(shù):

  • f, 你希望調(diào)整順序的因子
  • x, 你希望用來調(diào)整順序的依據(jù)(必須是一個和f等長的vector
  • fun, 如果x包含多個數(shù)值,你希望用何種方式處理他們为严,來對f進(jìn)行排序(默認(rèn)是median)敛熬。

使用該函數(shù),我們可以輕松的對柱狀圖按降序排列:

ggplot(relig_summary, aes(tvhours, fct_reorder(relig, tvhours))) +
  geom_col(width = .7, alpha = .7, color = "black")
Fig.2

當(dāng)然第股,如果我們想讓上邊的柱子按升序排列应民,只需要在上邊的代碼中加一個負(fù)號-

ggplot(relig_summary, aes(tvhours, fct_reorder(relig, - tvhours))) +
  geom_col(width = .7, alpha = .7, color = "black")

2.2 fct_relevel()

有時,我們需要將一個特殊的類別移到圖的最前邊作為參照夕吻,例如本案例中诲锹,我們特別想用“沒有信仰”的None和其他類型進(jìn)行對比,所以需要把None放在最前面涉馅,這時候可以用fct_relevel()命令:

# 先排序归园,再把`None`放在因子順序的最后
fct <- fct_reorder(relig_summary$relig, relig_summary$tvhours) %>%
 fct_relevel("None", after = length(fct))

# 繪圖
ggplot(relig_summary, aes(tvhours, fct)) +
  geom_col(width = .7, alpha = .7, color = "black")
Fig.3

其中fct_relevel("None", after = length(fct))的含義是將“None”放在第length(fct)位的后面,也就是第length(fct)-1的位次控漠,對應(yīng)在圖中蔓倍,就是最上方的位置。
如果想把"None"柱放在圖的最下邊盐捷,只需改寫為after = 0就可以了偶翅。

2.3 fct_reorder2

有時,我們需要基于兩個變量對某一因子進(jìn)行排序碉渡,特別是在繪制折線圖的時候聚谁,這時可以用到fct_reorder2命令,讓標(biāo)簽排序更加便于觀察:

# data
chks <- subset(ChickWeight, as.integer(Chick) < 10)
# Note that lines match order in legend
ggplot(chks, aes(Time, weight, colour = fct_reorder2(Chick, Time, weight))) +
  geom_point() +
  geom_line() +
  labs(colour = "Chick")
Fig.4

2.5 fct_infreq() 和 fct_rev()

這兩個命令主要是搭配geom_bar()進(jìn)行使用的滞诺,同樣是對柱狀圖進(jìn)行排序:

# 升序
increase_plot <- 
  gss_cat %>%
  mutate(marital = marital %>% fct_infreq() %>% fct_infreq()) %>%
  ggplot(aes(marital)) +
    geom_bar()

# 降序
decrease_plot <- 
  gss_cat %>%
  mutate(marital = marital %>% fct_infreq() %>% fct_rev()) %>%
  ggplot(aes(marital)) +
    geom_bar()

# 合并
pacman::p_load(cowplot)

plot_grid(increase_plot, decrease_plot, labels = c('fct_infreq', 'fct_rev'), label_size = 12)
Fig.5
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末形导,一起剝皮案震驚了整個濱河市环疼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌朵耕,老刑警劉巖炫隶,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異阎曹,居然都是意外死亡伪阶,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門处嫌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來栅贴,“玉大人,你說我怎么就攤上這事熏迹¢苁恚” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵注暗,是天一觀的道長坛缕。 經(jīng)常有香客問我,道長捆昏,這世上最難降的妖魔是什么祷膳? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮屡立,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘搀军。我一直安慰自己膨俐,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布罩句。 她就那樣靜靜地躺著焚刺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪门烂。 梳的紋絲不亂的頭發(fā)上乳愉,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天,我揣著相機(jī)與錄音屯远,去河邊找鬼蔓姚。 笑死,一個胖子當(dāng)著我的面吹牛慨丐,可吹牛的內(nèi)容都是我干的坡脐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼房揭,長吁一口氣:“原來是場噩夢啊……” “哼备闲!你這毒婦竟也來了晌端?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤恬砂,失蹤者是張志新(化名)和其女友劉穎咧纠,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泻骤,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡漆羔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了瞪讼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钧椰。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖符欠,靈堂內(nèi)的尸體忽然破棺而出嫡霞,到底是詐尸還是另有隱情,我是刑警寧澤希柿,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布诊沪,位于F島的核電站,受9級特大地震影響曾撤,放射性物質(zhì)發(fā)生泄漏端姚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一挤悉、第九天 我趴在偏房一處隱蔽的房頂上張望渐裸。 院中可真熱鬧,春花似錦装悲、人聲如沸昏鹃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽洞渤。三九已至,卻和暖如春属瓣,著一層夾襖步出監(jiān)牢的瞬間载迄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工抡蛙, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留护昧,地道東北人。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓溜畅,卻偏偏與公主長得像捏卓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容