关于使用python seaborn库绘制violinplot小提琴图的一些小坑
、
Seaborn是基于matplotlib的Python可视化库。 它提供了一个高级界面来绘制有吸引力的统计图形。Seaborn其实是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,不需要经过大量的调整就能使你的图变得精致。
这里的难点是我想完成小提亲图的hue分类,这一点必须在seaborn库的violinplot函数中,将hue设置为你想要作为区分的类别,同时split参数设置为True:
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import xlrd
tips = pd.read_excel(\'volin2.xlsx\')
sns.violinplot(x= "class",y="score",data=tips,
hue="weighted",
split=True,
linewidth = 2, #线宽
width = 0.8, #箱之间的间隔比例
palette = \'muted\', #设置调色板
order = [\'Math\' , \'Art\' , \'Music\' , \'Stories\', \'Animations\',\'Games\'], #筛选类别
# scale = \'count\', #测度小提琴图的宽度: area-面积相同,count-按照样本数量决定宽度,width-宽度一样
gridsize = 50, #设置小提琴图的平滑度,越高越平滑
# inner = \'box\', #设置内部显示类型 --> \'box\',\'quartile\',\'point\',\'stick\',None
#bw = 0.8 #控制拟合程度,一般可以不设置
)
plt.show()
直接上了代码,这里我的数据是一个excel表格,有一个很坑的点是,seaborn官方引入数据的方式是使用tips = sns.load_dataset(\'tips\')语句,其中tips竟然是他内置的一个数据集,这也太坑了。
通过查资料,最后确定是导入数据的方式是使用pandas库:tips = pd.read_excel(\'volin2.xlsx\'),一句话解决。
我的数据集大概是3行,这里一定要将数据集调整成violinplot可以接受的格式:
三列分别是作品类别,作品分数,和作品是否被加权,最后小提琴图再细分的依据就是作品是否被加权
最后代码效果如下:
这里有一个巨坑,网上所有的教程,在筛选类别的时候,都是使用的大括号{ },这会导致下面的math,art等等6类的顺序在每次运行时候发生随机的变化!
修改成:
order = [\'Math\' , \'Art\' , \'Music\' , \'Stories\', \'Animations\',\'Games\'], #筛选类别
使用中括号,解决这个问题。
还有一个大坑就是图的导出,如果需要得到清晰度高的pdf文件,需要在cmd中运行这个程序,但是在cmd运行的时候出现了一个困扰我一个半小时的问题!提示我缺包,但是在pycharm中是不缺的。
网上教程一大堆,大致都是说在cmd找包的方式和ide不一样,但是所有方法全部试过,通通不适用。
最后我的方法是:在cmd中,使用pip安装提示缺的包:python -m install XX
缺啥安装啥,最后成功之后,弹出结果图,保存为pdf文件,大功告成。
这里使用python3是因为我python2和3都有安装的原因。