Python 小提琴图(violinplot)

1. 两种不同shape的数据

这个问题也不是很理解, ax.violinplot() 需要一个 dataset , 如果我们要绘制多个小提琴, 那么 dataset 应该是一个二维数据

1.1 list类型

import numpy as np
import matplotlib.pyplot as plt
import timepositions=[1,2,4,7]
data=[np.random.normal(1,5,100).tolist(),np.random.normal(20,5,100).tolist(),np.random.normal(30,5,100).tolist(),np.random.normal(40,5,100).tolist(),
]print(len(data))fig,ax=plt.subplots()ax.violinplot(data,positions,showmeans=True,showmedians=True)import osSaveDir = 'result/'
if not os.path.exists(SaveDir):os.makedirs(SaveDir)
now = time.strftime("%Y_%m%d_%H%M_%S", time.localtime(time.time()))  # 获得当前时间 2021_1108_2310_22
SaveFile = SaveDir + 'zzz' + '_' + now + '.png'
plt.savefig(SaveFile)
print(SaveFile +    ' ==================>>> has been complete')
plt.close()

此时 data 的每一行构成一个 violin , 合乎我们的理解

1.2 numpy.ndarray 类型

这个时候如果 np 数组的 shape 是 4*100, 程序是报错的,此时 violinplot 是按照 列 来读取 data 的,就会构造100个violin,而 position 只指定了 4 个 位置。当然,不指定 position 也是可以的,不过画出来的图不是预期的了。

如果 ndarray 类型 的 dataset 的 shape 是 4*100,不指定 position 参数

import numpy as np
import matplotlib.pyplot as pltpositions = [1, 2, 4, 7]data = np.zeros((4, 100))data[0] = np.random.normal(1, 5, 100)
data[1] = np.random.normal(20, 5, 100)
data[2] = np.random.normal(30, 5, 100)
data[3] = np.random.normal(40, 5, 100)fig, ax = plt.subplots()ax.violinplot(data, showmeans=True, showmedians=True)

得到


只能将 ndarray 类型的 dataset 的 shape 改成 100*4

import numpy as np
import matplotlib.pyplot as plt
import timepositions = [1, 2, 4, 7]data = np.zeros((100, 4))data[:,0]=np.random.normal(1,5,100)
data[:,1]=np.random.normal(20,5,100)
data[:,2]=np.random.normal(30,5,100)
data[:,3]=np.random.normal(40,5,100)fig, ax = plt.subplots()ax.violinplot(data,positions, showmeans=True, showmedians=True)

2.为小提琴图添加图例

ax.violinplot() 无法直接添加图例,可以使用带颜色的 patch 来描述对应的 violin

import matplotlib.pyplot as plt
import os
import time
import numpy as npv1=np.random.normal(1,5,100)v2=np.random.normal(20,5,100)v3=np.random.normal(30,5,100) v4=np.random.normal(40,5,100) fig, ax = plt.subplots() #(figsize=(12,3.5))h12=ax.violinplot([v1,v2],positions=[1,2],showmeans=True,showmedians=True)
h3=ax.violinplot(v3,positions=[4],showmeans=True,showmedians=True)
h4=ax.violinplot(v4,positions=[7],showmeans=True,showmedians=True)h12_color=h12['bodies'][0].get_facecolor().flatten()
h3_color=h3['bodies'][0].get_facecolor().flatten()
h4_color=h4['bodies'][0].get_facecolor().flatten()import matplotlib.patches as mpatches
h12_patch = mpatches.Patch(color=h12_color, label='violin1 and violin2')
h3_patch = mpatches.Patch(color=h3_color, label='violin3')
h4_patch = mpatches.Patch(color=h4_color, label='violin4')ax.legend(handles=[h12_patch,h3_patch,h4_patch],loc=4)

一个 ax.violinplot() 如果同时绘制多个 [v1, v2], 就作为整体一起处理了。

首先获得 violin 的颜色,然后为每个 violin 添加一个patch

h12_color=h12['bodies'][0].get_facecolor().flatten()import matplotlib.patches as mpatches
h12_patch = mpatches.Patch(color=h12_color, label='violin1 and violin2')

3. 参考链接

matplotlib-为小提琴图制作标签

legend guide

Python 小提琴图(violinplot)相关推荐

  1. FigDraw 11. SCI 文章绘图之小提琴图 (ViolinPlot)

    桓峰基因公众号推出基于R语言绘图教程并配有视频在线教程,目前整理出来的教程目录如下: FigDraw 1. SCI 文章的灵魂 之 简约优雅的图表配色 FigDraw 2. SCI 文章绘图必备 R ...

  2. seaborn分类数据可视:散点图|箱型图|小提琴图|lv图|柱状图|折线图

    一.散点图stripplot( ) 与swarmplot() 1.分类散点图stripplot( ) 用法stripplot(x=None, y=None, hue=None, data=None, ...

  3. 数据可视化库 matplotlib 入门7——箱形图、小提琴图

    Matplotlib 库使用入门7--箱形图.小提琴图 箱形图 boxplot() 函数 绘制示例 小提琴图 violinplot() 函数 绘制示例 在前面关于 matploblib 的文章中,笔者 ...

  4. Python使用matplotlib可视化小提琴图、seaborn中的violinplot函数可视化多分类变量的小提琴图(Violin Plot)

    Python使用matplotlib可视化小提琴图.seaborn中的violinplot函数可视化多分类变量的小提琴图(Violin Plot) 目录

  5. python绘制小提琴图_关于使用python seaborn库绘制violinplot小提琴图的一些小坑

    . Seaborn是基于matplotlib的Python可视化库. 它提供了一个高级界面来绘制有吸引力的统计图形.Seaborn其实是在matplotlib的基础上进行了更高级的API封装,从而使得 ...

  6. python怎么绘制小提琴图?|seaborn violinplot

    小提琴图 小提琴图显示了一个(或多个)变量在不同层次上的分布,这样就可以比较这些分布.小提琴图不同于箱式图,箱式图中所有的图成分对应于实际的数据点,小提琴图的特征是分布的核密度估计.我个人感觉小提琴图 ...

  7. python绘制小提琴图_seaborn画小提琴图(violin plot)

    简介 小提琴图是用来展示多组数据的分布状态以及概率密度.跟箱线图类似,但是可以密度层面展示更好.在数据量非常大不方便一个一个展示的时候小提琴图特别适用.而python里面的seaborn包可以很方便的 ...

  8. python绘制小提琴图数据_Python数据处理从零开始----第四章(可视化)(16)一文解决小提琴图violin plot...

    原文:Python数据处理从零开始----第四章(可视化)(16)一文解决小提琴图violin plot​www.jianshu.com Python数据处理从零开始----第四章(可视化)(16)一 ...

  9. 【python】seaborn绘制小提琴图和箱线图

    文章目录 箱线图 增强箱线图 小提琴图 如果看过这篇用python给女朋友挑钻石,那么可以直接从箱线图开始读. seaborn是matplotlib的补充包,提供了一系列高颜值的figure,并且集成 ...

最新文章

  1. c# out ref
  2. 计算机现代管理专业,信息管理与信息系统是个鸡肋专业吗?
  3. JS常用的设计模式(7)—— 外观模式
  4. 今天才知道,MySQL 的 binlog 编号可以这么大!
  5. apr java_基于 APR 的原生库
  6. java 数据纠错,纠错码简介
  7. mysql 中文字符排序规则_mysql中字符集和排序规则说明
  8. 那些不是秘密的微信earning方法
  9. Hash算法中的CRC
  10. Gazebo加载模型时黑屏
  11. [转自360kr]如何才能进入Facebook工作?公司内部工程师告诉你
  12. 用Barcode生成条形码图片
  13. 【操作系统】第一章.操作系统引论思维导图
  14. 黑群DS3617xs 6.2.3套件中心无法添加第三方源/添加第三方源失败解决方案/群晖套件中心无效的位置解决
  15. 高中计算机课程教程,高中信息技术课教学计划
  16. 漫画人工智能:人工智能简史
  17. 阿里实习总结(近期)
  18. cadence基本操作
  19. linux下kegg注释软件,工具篇丨GO和KEGG富集不到通路?快试试这个超赞的功能分析工具吧...
  20. Apad Qzone项目总结(一)---发布!!!

热门文章

  1. html多页面之间如何通信,html5中sharedWorker实现多页面通信代码示例
  2. IOT数据采集的转换器的设计和实现
  3. 《神奇的数学》读后感_《走进奇妙的数学世界》读后感
  4. vtk教程第六章 基础算法
  5. linux用户无法接收邮件,linux 下 搭建邮件邮件服务器(Postfix+Dovecot)(一)-系统账户登陆收发邮件...
  6. vivo手机可以适配鸿蒙系统吗,originos系统适配机型 vivo全新手机系统支持哪些机型...
  7. c++新技能不断get中
  8. Joel在耶鲁大学的演讲
  9. GFS —— 分布式文件系统
  10. 激光雷达相关技术方案介绍