使用 ggplot2 创建类似于 d3.js 强制布局的气泡图
Create bubble chart similar to d3.js force layout using ggplot2
是否可以使用 R
,最好是 ggplot2
制作类似于此的气泡图?
鉴于本例中有三个类别,属性为
- 所有圆圈相互吸引(将圆圈聚集在一起)
- 碰撞检测(停止圆重叠)
- 圈子会被吸引到三个中心之一,具体取决于它们的类别
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
我用 d3.js 标记了这个 - 我不熟悉 - 虽然问题是关于 R
。我希望吸引熟悉这两者的社区成员。 但请随意编辑标签 and/or post。
谢谢。
布局需要进一步 work/investigation,但这里有一个方法。
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()
由 reprex package (v0.2.1)
于 2018-11-20 创建
是否可以使用 R
,最好是 ggplot2
制作类似于此的气泡图?
鉴于本例中有三个类别,属性为
- 所有圆圈相互吸引(将圆圈聚集在一起)
- 碰撞检测(停止圆重叠)
- 圈子会被吸引到三个中心之一,具体取决于它们的类别
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
我用 d3.js 标记了这个 - 我不熟悉 - 虽然问题是关于 但请随意编辑标签 and/or post。R
。我希望吸引熟悉这两者的社区成员。
谢谢。
布局需要进一步 work/investigation,但这里有一个方法。
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()
由 reprex package (v0.2.1)
于 2018-11-20 创建