簡體   English   中英

如何使用ggplot2創建帶有主分組變量和子分組變量的條形圖?

[英]How to create a barchart with a main grouping variable and a sub-grouping variable using ggplot2?

我想制作一個Z的條形圖,由一個稱為Y的分組變量分組,然后進一步分組為X。我敢肯定有一種繪制此圖形的理想方法,但這就是我所掌握的。

HW1bii <- HW1b %>% 
  group_by(Y,X)

ggplot(data = HW1bii, mapping = aes(x = Z)) +
  geom_bar(color = "Black", fill = "steelblue")

並不是我要找的東西,但我希望有人能幫助我找到更好的東西。

structure(list(X = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 
4L, 4L, 5L, 5L, 5L, 6L, 6L, 6L, 7L, 7L, 7L), Y = c(1L, 2L, 3L, 
1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 
2L, 3L), Z = c(113L, 109L, 105L, 80L, 122L, 88L, 104L, 98L, 93L, 
105L, 99L, 105L, 99L, 105L, 94L, 104L, 110L, 109L, 106L, 93L, 
125L)), row.names = c(NA, -21L), class = c("tbl_df", "tbl", "data.frame"
))

有很多方法可以做到這一點。 這是使用facet_gridX軸上繪制X圖,按Y facet_grid

library(ggplot2)

ggplot(data = HW1b, aes(x = factor(X), y = Z)) +
  geom_bar(stat = "identity", color = "Black", fill = "steelblue", width = 0.5) +
  scale_x_discrete(name = "X") +
  facet_grid(Y ~ .)

在此處輸入圖片說明

您也可以使用coord_flip軸。

ggplot(data = HW1b, aes(x = factor(X), y = Z)) +
  geom_bar(stat = "identity", color = "Black", fill = "steelblue", width = 0.5) +
  scale_x_discrete(name = "X") +
  coord_flip() +
  facet_grid(Y ~ .)

在此處輸入圖片說明

或使用facet_grid(Y ~ X, scales = "free_x)

ggplot(data = HW1b, aes(x = factor(X), y = Z)) +
  geom_bar(stat = "identity", color = "Black", fill = "steelblue", width = 0.5) +
  scale_x_discrete(name = "") +
  facet_grid(Y ~ X, scales = "free_x")

在此處輸入圖片說明

或將Y映射為fill

ggplot(data = HW1b, aes(x = factor(X), y = Z, fill = factor(Y))) +
  geom_bar(stat = "identity", color = "Black", width = 0.5) +
  scale_x_discrete(name = "X") +
  scale_fill_viridis_d(name = "Y") +
  coord_flip()

在此處輸入圖片說明

或使用position = "dodge"創建組條形圖。

ggplot(data = HW1b, aes(x = factor(X), y = Z, fill = factor(Y))) +
  geom_bar(stat = "identity", position = "dodge", color = "Black", width = 0.5) +
  scale_x_discrete(name = "X") +
  scale_fill_viridis_d(name = "Y")

在此處輸入圖片說明

這不是條形圖,但是您也可以考慮使用geom_tileZ映射為fill

ggplot(data = HW1b, aes(x = X, y = Y, fill = Z)) +
  geom_tile(color = "Black") +
  scale_fill_viridis_c()

在此處輸入圖片說明

數據

HW1b <- structure(list(X = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 
                     4L, 4L, 5L, 5L, 5L, 6L, 6L, 6L, 7L, 7L, 7L), Y = c(1L, 2L, 3L, 
                                                                        1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 
                                                                        2L, 3L), Z = c(113L, 109L, 105L, 80L, 122L, 88L, 104L, 98L, 93L, 
                                                                                       105L, 99L, 105L, 99L, 105L, 94L, 104L, 110L, 109L, 106L, 93L, 
                                                                                       125L)), row.names = c(NA, -21L), class = c("tbl_df", "tbl", "data.frame"
                                                                                       ))

創建分組變量后,可以使用facet_wrap()進行此操作:

ggplot(HW1b %>% mutate(group = paste(X, Y, sep = "-")), aes(x = Z)) +
geom_bar(color = "Black", fill = "steelblue") +
facet_wrap(~group)

上面代碼的輸出 請注意, ggplot()忽略由group_by()創建的組,因此您無需執行代碼的第一步

暫無
暫無

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

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