Создание легенды с концентрическими кругами для пузырьковой диаграммы ggplot - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь воссоздать эту визуализацию пузырьковой диаграммы с использованием ggplot2 (я нашел код для этого в R, но не с пакетом ggplot2).Это то, что я до сих пор.В настоящее время в моем коде есть некоторые другие ошибки, но я хочу, чтобы легенда показывала концентрические круги по размеру, а не круги, показанные в строках.Спасибо за вашу помощь!

Оригинальная визуализация:
enter image description here

Мое воспроизведение:
enter image description here

Мой (упрощенный) код:

crime <-
read.csv("http://datasets.flowingdata.com/crimeRatesByState2005.tsv",
       header=TRUE, sep="\t")
ggplot(crime,
       mapping= aes(x=murder, y=burglary))+
    geom_point(aes(size=population), color="red")+
    geom_text(aes(label=state.name), show.legend=FALSE, size=3)+ 
    theme(legend.position = c(0.9, 0.2))

1 Ответ

0 голосов
/ 02 октября 2018

Вот подход, в котором мы строим легенду так, как ее представляли с нуля.

1) Эта часть немного подправляет вашу базовую диаграмму.

Спасибо, что включили исходные данные.Я пропустил это раньше и отредактировал этот ответ, чтобы использовать его.Я переключился на другую форму точки, чтобы мы могли указать как внешнюю границу (цвет), так и внутреннюю заливку.

gg <- ggplot(crime,
       mapping= aes(x=murder, y=burglary))+
  geom_point(aes(size=population), shape = 21, color="white", fill = "red")+

  ggrepel::geom_text_repel(aes(label = state.name),
                           size = 3, segment.color = NA,
                           point.padding = unit(0.1, "lines")) +
  theme_classic() +

  # This scales area to size (not radius), specifies max size, and hides legend
  scale_size_area(max_size = 20, guide = FALSE)

2) Здесь я создаю другую таблицу для использования для концентрических кругов легенды

library(dplyr); library(ggplot2)
legend_bubbles <- data.frame(
  label = c("3", "20", "40m"),
  size  = c(3E6, 20E6, 40E6)
) %>%
mutate(radius = sqrt(size / pi))   

3) В этом разделе добавляются пузыри легенды, текст и заголовок.

Это не идеальный вариант, так как для разных размеров печати требуется корректировка размещения.Но кажется, что было бы сложно войти в базовые гробы с помощью ggplot_build, чтобы извлечь и использовать эти настройки размеров ...

gg + geom_point(data = legend_bubbles,
             #  The "radius/50" was trial and error. Better way?
             aes(x = 8.5, y = 250 + radius/50, size = size),
             shape = 21, color = "black", fill = NA) +
  geom_text(data = legend_bubbles, size = 3,
            aes(x = 8.5, y = 275 + 2 * radius/50, label = label)) +
  annotate("text", x = 8.5, y = 450, label = "Population", fontface = "bold")

enter image description here

...