python绘制雨云图(Raincloud)
在做探索性分析时,条形图、箱线图是很好的方法,他可以很好地展示大概的数据结构与分布,由于最近看到有人使用使用雨云图展示数据,图形看起来很美观,有趣,因此这里也就进行了梳理并使用python实现雨云图的绘制。
介绍
雨云图其实是一种混合图,由四部分组成,它们分别是 violin plot(云)、boxplot(伞)、swarm plot(雨)。
数据准备
仍然以企鹅数据作为示例,本站也已经提供,可直接下载: 企鹅数据
下载数据
pip install ptitprince
wget https://www.bobobk.com/wp-content/uploads/2021/12/penguins.csv
载入数据
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.read_csv("penguins.csv")
df.head()
结果
species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g sex
0 Adelie Torgersen 39.1 18.7 181.0 3750.0 MALE
1 Adelie Torgersen 39.5 17.4 186.0 3800.0 FEMALE
2 Adelie Torgersen 40.3 18.0 195.0 3250.0 FEMALE
3 Adelie Torgersen NaN NaN NaN NaN NaN
4 Adelie Torgersen 36.7 19.3 193.0 3450.0 FEMALE
开始绘图
前面我们通过pip已经安装了ptitprince包,现在真正开始绘制
violin图
首先是一半的小提琴图,即雨云图的云的部分,数据是bill_length_mm这个变量,以岛屿分组,其中half_violinplot函数负责半个小提琴图(violin plot),inner控制下方的小线条,为了使云位置摆放正确,将变量放在Y轴上
import matplotlib.pyplot as plt
import ptitprince as pt
pt.half_violinplot(data=df,y="island",x="bill_length_mm",inner=None)
plt.savefig("half_violin.png",dpi=200)
boxplot图
接下来是伞的部分
pt.half_violinplot(data=df,y="island",x="bill_length_mm",inner=None)
sns.boxplot(data=df,y="island",x="bill_length_mm",width = .15, zorder = 10,boxprops = {'facecolor':'none', "zorder":10},
whiskerprops = {'linewidth':2, "zorder":10})
plt.savefig("violin_box.png",dpi=200)
strip plot图
雨云图的雨部分,使用stripplot,并通过jitter参数将散点分散
pt.half_violinplot(data=df,y="island",x="bill_length_mm",inner=None)
sns.boxplot(data=df,y="island",x="bill_length_mm",width = .15, zorder = 10,boxprops = {'facecolor':'none', "zorder":10},
whiskerprops = {'linewidth':2, "zorder":10})
sns.stripplot(data=df,y="island",x="bill_length_mm",jitter=1,edgecolor = "white",zorder = 0)
plt.savefig("raincloud.png",dpi=200)
R 实现
同样这里将R语言实现的雨云图一并呈上
library(ggplot2)
library(ggdist)
df = read.table("penguins.csv",sep=",",header=TRUE)
pdf("raincloud.pdf",width=14, height=7)
ggplot(data=df,aes(y=bill_length_mm,x=factor(island),fill=factor(island)))+
ggdist::stat_halfeye(adjust=0.5,justification=-.2,.width=0,point_colour=NA) +
geom_boxplot(width=0.2,outlier.color=NA) +
ggdist::stat_dots(side="left",justification=1.1)
dev.off()
总结
本文通过将violin小提琴图与boxplot箱线图,stripplot进行结合创造出雨云图,该图在展示数据分布上更加直观,好看。
- 原文作者:春江暮客
- 原文链接:https://www.bobobk.com/791.html
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。