Как перекрыть две диаграммы в R?

#r #ggplot2 #encryption #data-visualization #bubble-chart

Вопрос:

У меня есть следующий фрейм данных, который я использую для создания диаграммы, используя приведенный ниже код —

Данные —

 ```structure(list(percents = c(52, 40, 34, 55, 48, 38, 17), label = c("Type 1",  "Type 2", "Type 3", "Type 4", "Type 5", "Type 6", "Type 7")), class = "data.frame", row.names = c(NA,  -7L))```  

Код для диаграммы 2018 годадиаграмма 2018 года

 ```df %gt;% mutate(r = sqrt(percents), x = r   cumsum(lag(2 * r, default = 0))) %gt;%  ggplot()     geom_circle(aes(x0 = x, r = r, y0 = r), size = 3, color = "gray")    geom_text(aes(x = x, y = r, label = paste0(percents, "%"), size = percents),  fontface = "bold", color = "#643291")    geom_text(aes(x = x, y = 20, label = label), vjust = 0,  fontface = "bold", color = "gray20", size = 3)    geom_segment(aes(x = x, xend = x, y = r   3, yend = 18),  color = "#643291", size = 2)    coord_equal()    scale_y_continuous(limits =c(-5, 25))    scale_size_continuous(range = c(4, 8))    theme_void()    theme(legend.position = "none")    labs(title ='2018')```   Then I have the following data for 2018 group B -  ```structure(list(percents = c(48, 60, 66, 45, 52, 62, 83), label = c("Type 1",  "Type 2", "Type 3", "Type 4", "Type 5", "Type 6", "Type 7")), class = "data.frame", row.names = c(NA,  -7L))```  

И я использую аналогичный код, как указано выше (но другого цвета для создания другой диаграммы).2018 группа В

 ```df %gt;% mutate(r = sqrt(percents), x = r   cumsum(lag(2 * r, default = 0))) %gt;%  ggplot()     geom_circle(aes(x0 = x, r = r, y0 = r), size = 3, color = "black")    geom_text(aes(x = x, y = r, label = paste0(percents, "%"), size = percents),  fontface = "bold", color = "#643291")    geom_text(aes(x = x, y = 20, label = label), vjust = 0,  fontface = "bold", color = "gray20", size = 3)    geom_segment(aes(x = x, xend = x, y = r   3, yend = 18),  color = "#643291", size = 2)    coord_equal()    scale_y_continuous(limits =c(-5, 25))    scale_size_continuous(range = c(4, 8))    theme_void()    theme(legend.position = "none")    labs(title ='2018')```  

Мой вопрос в том, есть ли способ перекрыть две диаграммы, чтобы показать два линейных набора кругов вместе или бок о бок, как я делаю прямо сейчас?

Спасибо!

Комментарии:

1. Я был бы признателен за любой ответ здесь! Спасибо!

2. Как вы хотите, чтобы выглядел конечный продукт? Вам нужна одна длинная строка из 14 кругов, вы хотите, чтобы две отдельные панели отображались вместе, вы хотите, чтобы круги для каждого типа перекрывались? Независимо от этого, вероятно, лучше всего объединить ваши наборы данных в один с чем-то вроде bind_rows(a, b, .id = "source") .

3. Спасибо за уделенное время! Я хочу, чтобы круги перекрывались общей средней точкой.

Ответ №1:

Я думаю, что это может приблизить вас к тому, что вы ищете, но я не уверен, что это отличная визуализация.

 a lt;-   structure(  list(  percents = c(52, 40, 34, 55, 48, 38, 17),   label = c("Type 1", "Type 2", "Type 3", "Type 4", "Type 5", "Type 6", "Type 7")  ),   class = "data.frame",   row.names = c(NA, -7L)  )  b lt;-   structure(  list(  percents = c(48, 60, 66, 45, 52, 62, 83),   label = c("Type 1", "Type 2", "Type 3", "Type 4", "Type 5", "Type 6", "Type 7")  ),   class = "data.frame",   row.names = c(NA, -7L)  )  df lt;-   bind_rows(a, b, .id = "source") %gt;%   group_by(label) %gt;%   mutate(  r = sqrt(percents),   max_r = max(r) # get the bigger circle of the pair  ) %gt;%   group_by(source) %gt;%   mutate(  x = max_r   cumsum(dplyr::lag(2 * max_r, default = 0)))  )  ggplot(df)    ggforce::geom_circle(  aes(  x0 = x,   r = r,   y0 = 0,   color = source  ),  size = 1  )     geom_text(  data = filter(df, source == 1),   aes(  x = x,   y = 2.5,   label = str_c(percents, "%"),   color = source  ),   show.legend = FALSE  )    geom_text(  data = filter(df, source == 2),   aes(  x = x,   y = -2.5,   label = str_c(percents, "%"),   color = source  ),   show.legend = FALSE  )    geom_text(  aes(  x = x,   y = -15,   label = label  )  )     labs(color = NULL)    coord_equal(clip = "off")   # so "Type" labels aren't clipped  theme_void()