簡體   English   中英

使用tidyverse的forcats和ggplot2軟件包進行繪圖的重新排序因子

[英]Reordering factor for plotting using forcats and ggplot2 packages from tidyverse

首先,感謝tidyverse ^ 13 我希望下表中的柱線遵循由forcats::fct_reorder ()重新排序的相同因子水平。 令人驚訝的是,當View ()時,在數據集中看到的級別順序與在圖表中顯示時的級別不同(請參見下文)。 該圖表應說明在獎勵分數之前和之后失敗的學生人數(我想根據獎勵之前的失敗學生人數對條形進行排序)。

微機

  ggplot (df) +
  geom_bar (aes (forcats::fct_reorder (subject, FailNo, .desc= TRUE), FailNo, fill = forcats::fct_rev (Bonus)), position = 'dodge', stat = 'identity') +
  theme (axis.text.x=element_text(angle=45, vjust=1.5, hjust=1.5, size = rel (1.2)))

dput(df)的數據輸出

structure(list(subject = structure(c(1L, 2L, 5L, 6L, 3L, 7L,
4L, 9L, 10L, 8L, 12L, 11L, 1L, 2L, 5L, 6L, 3L, 7L, 4L, 9L, 10L,
8L, 12L, 11L), .Label = c("CAB_1", "DEM_1", "SSR_2", "RRG_1",
"TTP_1", "TTP_2", "IMM_1", "RRG_2", "DEM_2", "VRR_2", "PRS_2",
"COM_2", "MEB_2", "PHH_1", "PHH_2"), class = "factor"), Bonus = structure(c(2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("After", "Before"), class = "factor"),
    FailNo = c(29, 28, 20, 18, 15, 13, 12, 8, 5, 4, 4, 2, 21,
    16, 16, 14, 7, 10, 10, 5, 3, 4, 4, 1)), .Names = c("subject",
"Bonus", "FailNo"), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA,
-24L))

在此處輸入圖片說明

條形圖 在此處輸入圖片說明

問題

根據上表, SSR_2 var應該排在第五位, IMM_1應該IMM_1在第六位,但是在圖表中我們看到這兩個變量交換了位置。 在這種情況下,如何在tidyverse之后對其進行排序?

x軸具有unique級別的使用factor

ggplot (df) + 
 geom_bar (aes(factor(forcats::fct_reorder
 (subject, FailNo, .desc= TRUE), 
 levels=unique(subject)), 
 FailNo, 
 fill = forcats::fct_rev (Bonus)), 
 position = 'dodge', stat = 'identity') + 
 theme(axis.text.x=element_text(angle=45, vjust=1.5, hjust=1.5, size = rel (1.2)))

編輯:@ dotorate評論

獎金前排序不成功

library(dplyr)
df_before_bonus <- df %>% filter(Bonus == "Before") %>% arrange(desc(FailNo))

在獎金前使用FailNo來創建因子

df$subject <- factor(df$subject, levels = df_before_bonus$subject, ordered = TRUE)

更新劇情

ggplot(df) +
    geom_bar(aes (x = subject, y = FailNo, fill = as.factor(Bonus)), 
             position = 'dodge', stat = 'identity') +
    theme (axis.text.x=element_text(angle=45, vjust=1.5, hjust=1.5, size = rel (1.2)))

在此處輸入圖片說明

暫無
暫無

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

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