使用ggplot2创建类似于d3.js强制布局的气泡图

mar*_*kus 3 r data-visualization ggplot2 circle-pack

是否可以使用 制作与此类似的气泡图R,最好是ggplot2

在此处输入图片说明

鉴于此示例中有三个类别,属性是

  • 所有圆圈都相互吸引(将圆圈聚集在一起)
  • 碰撞检测(停止圆圈重叠)
  • 圆圈被吸引到三个中心之一,这取决于它们的类别

来源:d3indepth.com/force-layout

数据(虽然我真的很确定这种情节的数据应该是什么样的)

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
Run Code Online (Sandbox Code Playgroud)

我用标记它- 我不熟悉 - 尽管问题是关于R. 我希望能吸引熟悉两者的社区成员。 但是可以随意编辑标签和/或帖子。

谢谢。

Jak*_*upp 6

需要对布局进行一些进一步的工作/调查,但这是一种方法。

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()
Run Code Online (Sandbox Code Playgroud)

reprex 包(v0.2.1)于 2018 年 11 月 20 日创建