Как создать диаграмму с основной переменной группировки и переменной подгруппы, используя ggplot2? - PullRequest
0 голосов
/ 18 сентября 2018

Я хотел бы сделать диаграмму 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"
))

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Есть много способов сделать это. Вот график X на оси 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 ~ .)

enter image description here

Вы также можете переместить ось с помощью 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 ~ .)

enter image description here

Или используйте 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")

enter image description here

Или карта 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()

enter image description here

Или используйте 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")

enter image description here

И это не гистограмма, но вы также можете рассмотреть возможность использования geom_tile для отображения Z в качестве fill.

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

enter image description here

DATA

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"
                                                                                       ))
0 голосов
/ 18 сентября 2018

Вы можете использовать facet_wrap(), чтобы сделать это после создания переменной группировки:

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

output of the above code Обратите внимание, что ggplot() игнорирует группы, созданные с помощью group_by(), поэтомувам не нужен первый шаг вашего кода

...