Создайте пузырьковую диаграмму, аналогичную разметке силы d3.js, используя ggplot2 - PullRequest
0 голосов
/ 21 ноября 2018

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

enter image description here

Учитывая, что в этом примере есть три категории, свойства

  • все круги притягивают друг друга (кобъединение кругов)
  • обнаружение столкновений (чтобы остановить наложение кругов)
  • круги притягиваются к одному из трех центров, в зависимости от их категории

Источник: d3indepth.com / force-layout

data (хотя я действительно уверен, как должны выглядеть данные для такого графика)

set.seed(1)
dat <- data.frame(category = rep(c("A", "B", "C"), each = 10),
                  bubble = rep(1:10, 3),
                  radius = round(runif(30, min = 0.5, max = 3), 2),
                  stringsAsFactors = FALSE)
dat

Я отмечаю это как - с которым я не знаком - хотя вопрос о R.Я надеюсь привлечь членов сообщества, которые знакомы либо с , но не стесняйтесь редактировать теги и / или сообщения.

Спасибо.

1 Ответ

0 голосов
/ 21 ноября 2018

Нужна дальнейшая работа / исследование в макете, но вот подход.

library(packcircles)
library(tidyverse)

set.seed(1)
dat <- data.frame(category = rep(c("A", "B", "C"), each = 10),
                  id = 1:30,
                  radius = round(runif(30, min = 0.5, max = 3), 2),
                  stringsAsFactors = FALSE)

#Create layouts for each group by splitting, mapping and recombining
dat.gg <- dat %>% 
  split(.$category) %>% 
  map(~circleProgressiveLayout(.x$radius, sizetype='radius')) %>% 
  imap_dfr(~circleLayoutVertices(.x, npoints=50) %>% mutate(category = .y))

#Do the thing
ggplot() + 
  geom_polygon(data = dat.gg, aes(x, y, group = id, fill = category), colour = "black", alpha = 0.6) +
  facet_wrap(~category) +
  scale_fill_viridis_d() +
  theme_void() + 
  theme(legend.position="none", plot.margin=unit(c(0,0,0,0),"cm") ) + 
  coord_equal()

Создано в 2018-11-20 Представить пакет (v0.2.1)

...