#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))```
```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))```
И я использую аналогичный код, как указано выше (но другого цвета для создания другой диаграммы).
```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()