导语
气泡图(bubble chart)可用于展示三个变量之间的关系。
背景介绍
气泡图在我们做功能富集的时候最常用到,下面是一个很常见实例。
今天小编给大家介绍一个不同的气泡图画法--mini bubble plots,在比较离散数据时,迷你气泡图允许通过颜色、形状或标签显示比传统气泡图更多的信息。使用R包ggBubbles可以方便地绘制这种气泡图。
R包安装
require(ggplot2)
require(ggBubbles)
require(dplyr)
require(tibble)
结果解析
01
两种气泡图比较
在这里,我们展示了在某些具有离散数据的用例中 MiniBubble 图与传统 Bubbleplot 相比的优势。
实例数据:
data(MusicianInterestsSmall)
head(MusicianInterestsSmall)
传统气泡图
传统的气泡图能够按大小描绘能够演奏爵士乐或古典音乐的吉他手或钢琴手的数量,并通过颜色编码显示平均体验水平。
ggplot(data = MusicianInterestsSmall %>%
group_by(Instrument, Genre) %>%
summarize(Count = n(), AvgLevel = mean(as.integer(Level))),
aes(x = Instrument, y = Genre, size = Count, col = AvgLevel)) +
geom_point() + theme_bw(base_size = 18) +
scale_colour_gradientn(
colours = rev(topo.colors(2)),
na.value = "transparent",
breaks = as.integer(MusicianInterestsSmall$Level) %>%
unique %>% sort,
labels = levels(MusicianInterestsSmall$Level),
limits = c(as.integer(MusicianInterestsSmall$Level) %>% min,
as.integer(MusicianInterestsSmall$Level) %>% max)) +
scale_size_continuous(range = c(3, 11))
迷你气泡图
MiniBubble 图允许单独显示每个音乐家及其相应的技能水平:
ggplot(data = MusicianInterestsSmall,
aes(x = Instrument,
y = Genre,
col = Level)) +
geom_point(position = position_surround(), size = 4) +
scale_colour_manual(values = c("#00e5ff",
"#4694ff",
"#465aff",
"#2c00c9")) +
theme_bw(base_size = 18)
02
偏移参数
MiniBubble图是由传递给 geom_point 的位置参数的 position_surround() 函数完成的。这些点将围绕中心按顺时针方向填充。
散点的偏移量可以作为参数传递给 position_surround()。
ggplot(data = MusicianInterestsSmall,
aes(x = Instrument,
y = Genre,
col = Level)) +
geom_point(position = position_surround(offset = .2), size = 4) +
scale_colour_manual(values = c("#00e5ff",
"#4694ff",
"#465aff",
"#2c00c9")) +
theme_bw(base_size = 18)
03
实例
使用一个更大些的数据集看看效果
data(MusicianInterests)
head(MusicianInterests)
基础图形大概是这样滴
p <- ggplot(data = MusicianInterests,
aes(x = Genre,
y = Instrument,
col = Level)) +
geom_point(size = 1.8,
position = position_surround(offset = .2))
让我们优化一下细节!
p <- p + theme_bw(base_size = 17) +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
scale_colour_gradientn(
colours = rev(topo.colors(2)),
na.value = "transparent",
breaks = 1:6,
labels = c("Interested",
"Beginner",
"Intermediate",
"Experienced",
"Very experienced",
"Pro")) +
xlab("") + ylab("")
p
一幅漂亮的MiniBubble图就完成啦!
小编总结
ggBubbles主要是通过position_surround()函数实现了位置参数的添加,从而将原本用大小表示的数量细分到具体的类别,更清楚的表示了数据分布。