
一、介绍
所谓的云雨图,基本形状由云朵和雨点组成,上面云朵是数据密度图,伞就是平铺的箱线图,雨就是下面的数据点。百闻不如一见,快随我一起来瞅瞅如何绘制吧。
二、R 语言实现
2.1 准备数据
准备下图所示数据,数据文件第一列对应分类名称,其它列为对应的数据。

2.2 命令实现
# 自定义函数
"%||%" <- function(a, b) {
if (!is.null(a)) a else b
}
geom_flat_violin <- function(mapping = NULL, data = NULL, stat = "ydensity",
position = "dodge", trim = TRUE, scale = "area",
show.legend = NA, inherit.aes = TRUE, ...) {
layer(
data = data,
mapping = mapping,
stat = stat,
geom = GeomFlatViolin,
position = position,
show.legend = show.legend,
inherit.aes = inherit.aes,
params = list(
trim = trim,
scale = scale,
...
)
)
}
GeomFlatViolin <-
ggproto("GeomFlatViolin", Geom,
setup_data = function(data, params) {
data$width <- data$width %||%
params$width %||% (resolution(data$x, FALSE) * 0.9)
# ymin, ymax, xmin, and xmax define the bounding rectangle for each group
data %>%
group_by(group) %>%
mutate(ymin = min(y),
ymax = max(y),
xmin = x,
xmax = x + width / 2)
},
draw_group = function(data, panel_scales, coord) {
# Find the points for the line to go all the way around
data <- transform(data, xminv = x,
xmaxv = x + violinwidth * (xmax - x))
# Make sure it's sorted properly to draw the outline
newdata <- rbind(plyr::arrange(transform(data, x = xminv), y),
plyr::arrange(transform(data, x = xmaxv), -y))
# Close the polygon: set first and last point the same
# Needed for coord_polar and such
newdata <- rbind(newdata, newdata[1,])
ggplot2:::ggname("geom_flat_violin", GeomPolygon$draw_panel(newdata, panel_scales, coord))
},
draw_key = draw_key_polygon,
default_aes = aes(weight = 1, colour = "grey20", fill = "white", size = 0.5,
alpha = NA, linetype = "solid"),
required_aes = c("x", "y")
)
绘制基础图
p0 <- ggplot(data = mat, aes(x = variable, y = value, fill = variable)) +
geom_flat_violin(position = position_nudge(x = 2, y = 0.8), alpha = 0.6)
添加散点图
p1 <- p0 + geom_jitter(aes(color=variable),
width=10,
size=2,
shape=1,
alpha = 0.6,
show.legend=NA)

添加箱线图
p2 <- p0 + geom_boxplot(
position=position_nudge(x=0.2),
outlier.shape = FALSE,
alpha = 0.4,
width = 20,
colour = "#000000")

2.3 平台实现
用“派森诺基因云” 的 【云雨图】,可以很方便的作上述图,并且提供了很多参数可以在线自由调整样式。
用上述示例数据,上传后提交绘图即可。

参数调整
- 在【图表设置】里面,可以调整图表类型为云雨箱线图、云箱线图、云雨图。



- 同时还可调整云雨图的图表方向,云朵的距离,云朵的颜色及透明度等,更多效果欢迎登录派森诺基因云进行体验。

每周掌握一个可视化工具,希望以后手里有很多把锤子。
网友评论