簡體   English   中英

繪制不同結果變量(R)的多個條形圖的更簡潔方法

[英]Cleaner way to plot multiple bar charts of different outcome variables (R)

我想知道是否有更好的方法來產生以網格形式排列的4個不同結果變量的條形圖:

這是我使用的代碼:

library(cowplot)

bar1 <- ggplot(data = subset(data, !is.na(MHQ_Heading_Male_Quartile))) +
  geom_bar(mapping = aes(x = MHQ_Heading_Male_Quartile))
bar2 <- ggplot(data = subset(data, !is.na(AHQ_Heading_Male_Quartile))) +
  geom_bar(mapping = aes(x = AHQ_Heading_Male_Quartile))
bar3 <- ggplot(data = subset(data, !is.na(MHQ_Heading_Female_Quartile))) +
  geom_bar(mapping = aes(x = MHQ_Heading_Female_Quartile))
bar4 <- ggplot(data = subset(data, !is.na(AHQ_Heading_Female_Quartile))) +
  geom_bar(mapping = aes(x = AHQ_Heading_Female_Quartile))

plot_grid(bar1, bar2, bar3, bar4, ncol = 2)

但是,有很多重復的代碼-是否有一些函數或方法用ggplot2在更少的行中創建相同的圖?

我會將相關的列從寬轉換為長(以"_Quartile"結尾的"_Quartile" ),然后使用facet_wrap在2x2的scales = "free"網格中顯示4個圖。

像這樣:

data %>%
    gather(key, value, ends_with("Quartile")) %>%
    filter(!is.na(value)) %>%
    ggplot(aes(value)) +
    geom_bar() +
    facet_wrap(~ key, scales = "free", ncol = 2, nrow = 2)

在此處輸入圖片說明

如前所述,您需要使用dplyr收集(或重塑包裝)將其制成長格式,然后對此進行分面。

`data %>%
  select( MHQ_Heading_Male_Quartile, AHQ_Heading_Male_Quartile, MHQ_Heading_Female_Quartile, AHQ_Heading_Female_Quartile) %>%
  gather("Type", "Range", MHQ_Heading_Male_Quartile:AHQ_Heading_Female_Quartile) %>%
  filter(!is.na(Range)) %>%
  ggplot(aes(x=Range)) + 
  geom_bar() + 
  facet_wrap(~Type, scales="free")`

我將它留給您清理圖表,但這是基本前提。

提取要顯示為nms的列名稱,然后對於每個列使用qplot創建ggplot對象,以便bars是此類對象的列表。 然后在plot_grid上運行plot_grid

nms <- grep("Quartile", names(data), value = TRUE)
bars <- lapply(nms, function(nm) qplot(na.omit(data[[nm]]), xlab = nm))
do.call("plot_grid", bars)

屏幕截圖

暫無
暫無

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

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