Python matplotlib 绘制提琴图

这是我参与11月更文挑战的第25天,活动详情查看:2021最后一次更文挑战

复习回顾

matplotlib 是Python专门提供绘制功能的库,我们前面也学习pyplot提供绘制折线、散点、柱状、直方、饼图等常见的图像外,还提供animation类绘制动态图。同时对特殊的图表如应用在物理学上的量场图、关注数据分布情况的箱型图等。以上所述的往期文章例举如下。

继上次我们学习能快速展示一组数据的中位数、上下四分位数、最大小值的箱型图pyplot.boxplot()方法。同样表示数据分布情况的还有一个图形提琴图。

提琴图.png

本期,我们学习matplotlib.pyplot.violinplot绘制提琴图相关属性学习,Let's go~

1. 提琴图概述

  • 什么是提琴图?

    • 提琴图是外形类似提琴,具有箱型图和密度图的特征
    • 提琴图是用来显示数据分布和出现概率的密度
    • 提琴图同展示一组数据的中位数、四分位数范围、密度、95%置信区间

    image.png

  • 提琴图应用场景

    • 提琴图可以用于比较不同样本之间的密度分布情况
    • 提琴图可用于显示数据完整的分布情况
    • 提琴图常用于在制作精确图表前对离散数据整理
    • 提琴图通常用于基因样本分布、人口年龄分布等等
  • 获取提琴图方法

import matplotlib.pyplot as plt 
plt.violinplot(dataset)
复制代码

2. 提琴图属性

  • 设置提琴图位置

    • 关键字:vert
    • 默认值为:True
    • 当vert为True时则创建垂直提琴图
    • 当vert为False时则创建水平提琴图
  • 设置提琴宽度

    • 关键字:width
    • 默认值为:0.5
  • 设置提琴数据

    • 设置显示均值关键字:showmeans,默认为False
    • 设置显示极值关键字:showextrema,默认为True
    • 设置显示中值关键字:showmedians,默认为False
  • 设置提琴样式

    • 需要使用pyplot.violinplot()返回字段“bodies”
    • 结合for循环遍历pyplot.violinplot()["bodies"]
    • 调用set_facecolor设置提琴颜色
    • 调用set_edgecolor设置提琴边框颜色
    • 调用set_alpha设置提琴图透明度
    • 调用set_linestyle设置提琴边框样式

3. 绘制提琴图步骤

  • 导入matplotlib.pyplot类
import matplotlib.pyplot as plt
复制代码
  • 使用numpy库里的normal(),random(),randint()等方法准备data数组向量序列
data = [np.random.normal(0,2,100)]
复制代码
  • 调用pyplot.violinplot(data)方法绘制提琴
part = plt.violinplot(data,showmedians=True)
复制代码
  • 调用pyplot.show()方法渲染显示提琴图表
plt.show()
复制代码

image.png

  • 通过使用yplot.violinplot()方法返回值,设置提琴图的颜色、边框样式等
for pc in part["bodies"]:
    print(pc)
    pc.set_facecolor("pink")
    pc.set_edgecolor("black")
    pc.set_alpha(1)
    pc.set_linestyle("--")
复制代码

image.png

4. 小试牛刀

我们学习以matplotlib提供的绘制提琴图violinplot()方法后,我们来实操一下与scatter结合

  • 调用pyplot.grid()方法为画布添加网格
  • 调用numpy.percentile()计算下四分为数,均值数,上四分为数
  • 调用pyplot.scatter()在提琴图上标记均值的符号
  • 调用pyplot.vline()在提琴图上标记四分位数
data = [np.random.normal(0,i,100) for i in range(2,6)]
plt.grid()
part = plt.violinplot(data,showmedians=True,widths=[0.3,0.4,0.5,0.6])
for pc in part["bodies"]:
    print(pc)
    pc.set_facecolor("orange")
    pc.set_edgecolor("black")
    pc.set_alpha(1)
    pc.set_linestyle("--")

q1,me,q3 = np.percentile(data,[25,50,75],axis=1)
ind = np.arange(1,len(me)+1)

plt.scatter(ind,me,marker="o",color="r",s=50,zorder=3)
plt.vlines(ind,q1,q3,color="k",linestyles="-",lw=5)
复制代码

image.png

总结

本期,我们对matplotlib.pyplot.violinplot()方法绘制提琴图相关属性。提琴图结合箱型图和密度图的特点,不仅展示数据的分布情况,还对数据的密度情况也展示出来。

以上是本期内容,欢迎大佬们点赞评论,下期见~

Guess you like

Origin juejin.im/post/7034853443697115143