使用SeaBorn 和Python Pandas绘制小提琴图
小提琴图(violin plot)是一种用于展示数值分布情况的图表,与箱线图类似,但小提琴图能更好的显示出数据的密度分布情况。本文将介绍如何使用SeaBorn和Python Pandas绘制小提琴图。
读取数据
读取数据可以使用pandas
库中的read_csv
函数进行。本次我们使用UCI Machine Learning Repository提供的Iris数据集进行演示。Iris数据集包含150个不同品种的鸢尾花的萼片和花瓣的长度和宽度,包含三个类别Iris Setosa,Iris Versicolour,Iris Virginica。代码如下:
import pandas as pd
iris = pd.read_csv("http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data",
names=['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class'])
读取数据后,我们可以对数据进行简单的探索,获取数据的行数、列数、各个特征的基本统计量等。比如,获取数据集的形状:
print(iris.shape) # 输出(150, 5)
绘制小提琴图
使用seaborn
库中的violinplot
函数可以绘制小提琴图,代码如下:
import seaborn as sns
sns.violinplot(x="class", y="sepal_length", data=iris)
运行以上代码,我们可以看到小提琴图,其中x轴代表鸢尾花的种类,y轴代表萼片长度。图中不同颜色的小提琴代表了不同品种鸢尾花萼片长度的分布情况。
我们还可以设置各种图表属性,比如调整小提琴宽度、颜色、填充方式等:
sns.violinplot(x="class", y="sepal_length", data=iris,
width=0.5, color="#3F88C5", inner="box")
多个小提琴图的绘制
如果我们需要在同一个图表中展示多个小提琴图,可以使用seaborn
库中的catplot
函数。例如,我们想要在同一张图表中展示花萼长度和花萼宽度的小提琴图:
sns.catplot(x="class", y="sepal_length", kind="violin", data=iris)
sns.catplot(x="class", y="sepal_width", kind="violin", data=iris)
上述代码中,kind
参数决定要绘制的图表类型,我们设置为小提琴图。
可视化数据密度分布
小提琴图不仅能够展示单个变量的分布情况,还能展示不同类别的变量的分布情况。例如,我们希望展示鸢尾花花萼长度在不同类别中的分布情况,我们可以使用seaborn
库中的violinplot
函数,加上split
参数即可。
sns.violinplot(x="class", y="petal_width", data=iris,
split=True, inner="quart", palette={"Iris-setosa": "y", "Iris-virginica": "b", "Iris-versicolor": "r"})
上述代码中,我们设置了split
参数为True
,代表将小提琴图在中心线处分裂展示。另外,我们通过palette
参数设置了不同品种鸢尾花的颜色。
隐藏x轴标签
在多个小提琴图的展示中,由于x轴标签重叠,会影响图表的美观度。可以使用set_xticklabels
和set_titles
函数隐藏x轴标签和图表标题:
ax1 = sns.catplot(x="class", y="petal_length", kind="violin", data=iris)
ax1.set_xticklabels([])
ax1.set_titles("")
ax2 = sns.catplot(x="class", y="petal_width", kind="violin", data=iris)
ax2.set_xticklabels([])
ax2.set_titles("")
结论
本文介绍了如何使用SeaBorn和Python Pandas绘制小提琴图,对于展示数值分布密度的数据有很好的效果。通过简单的代码调整可以控制小提琴的宽度、颜色、填充方式等。另外,结合catplot
函数还可以在同一张图表中展示多个小提琴图。最后,set_xticklabels
和set_titles
函数可以用于隐藏x轴标签和图表标题,提高图表的美观度。