Seaborn中箱线图和小提琴图的绘制方法
箱线图和小提琴图常被用来观测数据的中位数、上下四分位数分布范围以及异常值的分布情况。
seaborn中绘制箱线图使用的是sns.boxplot()函数。
sns.boxplot(x,y,hue,data,order,hue_order,orient,color,palette,saturation=0.75,width=0.8,dodge,fliersize=5,linewidth,whis=1.5,ax,**kwargs,)
关键常用参数说明:
x, y:指定要绘制箱线图的数据,x和y分别表示数据在x轴和y轴上的位置。其中,x和y参数只能指定一个,另一个参数需设置为None。
hue:可选参数,用于按照某个分类变量对数据进行分组,绘制不同颜色的箱线图。默认值为None,表示不进行分组。
data:指定要绘制箱线图的数据集,可以是DataFrame、Series、数组或列表等。
order:可选参数,用于指定箱线图中箱体的顺序。默认值为None,表示按照数据的顺序绘制箱体;可以设置为一个列表或数组,指定箱体的顺序。
hue_order:可选参数,用于指定分组变量的顺序。默认值为None,表示按照数据的顺序绘制分组变量;可以设置为一个列表或数组,指定分组变量的顺序。
orient:可选参数,用于指定箱线图的方向。默认值为"v",表示垂直方向;可以设置为"h",表示水平方向。
palette:可选参数,用于指定颜色调色板。默认值为None,表示使用默认的颜色调色板;可以设置为一个颜色调色板名称或一个颜色列表。
width:可选参数,用于指定箱体的宽度。默认值为0.8,表示箱体的宽度为整个数据范围的80%;可以设置为一个浮点数,表示宽度的比例。
dodge:可选参数,用于指定是否对分组变量进行分开绘制。默认值为False,表示不分开绘制;可以设置为True,表示分开绘制。
fliersize:可选参数,用于指定异常值的大小。默认值为5,表示异常值的大小为5个像素;可以设置为一个整数,表示大小的值。
linewidth:可选参数,用于指定箱线图的线宽。默认值为1,表示线宽为1个像素;可以设置为一个整数,表示线宽的值。
whis:可选参数,用于指定箱线图中异常值的范围。默认值为1.5,表示异常值的范围为上下四分位数加减1.5倍的四分位距;可以设置为一个浮点数,表示异常值的范围的倍数。
ax:可选参数,用于指定绘制箱线图的坐标轴对象。默认值为None,表示使用当前坐标轴。
**kwargs:用于传递其他绘图参数,例如图像的标题、标签、颜色等。
seaborn中绘制小提琴图使用的是violinplot()函数。
sns.violinplot(x,y,hue,data,order,hue_order,bw=‘scott’,cut=2,scale=‘area’,scale_hue,gridsize=100,width=0.8,inner=‘box’,split,dodgee,orient,linewidth,color,palette,saturation=0.75,ax,**kwargs,)
关键常用参数说明:
x, y:指定要绘制小提琴图的数据,x和y分别表示数据在x轴和y轴上的位置。其中,x和y参数只能指定一个,另一个参数需设置为None。
hue:可选参数,用于按照某个分类变量对数据进行分组,绘制不同颜色的小提琴图。默认值为None,表示不进行分组。
data:指定要绘制小提琴图的数据集,可以是DataFrame、Series、数组或列表等。
order:可选参数,用于指定小提琴图的顺序。默认值为None,表示按照数据的顺序绘制小提琴图;可以设置为一个列表或数组,指定小提琴图的顺序。
hue_order:可选参数,用于指定分组变量的顺序。默认值为None,表示按照数据的顺序绘制分组变量;可以设置为一个列表或数组,指定分组变量的顺序。
bw:可选参数,用于指定小提琴图的核密度估计带宽。默认值为"scott",表示使用Scott方法计算带宽;可以设置为一个浮点数,表示带宽的值。
cut:可选参数,用于指定小提琴图的尾部截断方式。默认值为None,表示不进行尾部截断;可以设置为一个数值,表示尾部截断的百分比。
scale:可选参数,用于指定小提琴图宽度的缩放因子。默认值为"area",表示根据样本数量自动缩放宽度;可以设置为"width",表示根据指定的宽度进行缩放。
scale_hue:可选参数,用于指定小提琴图在hue分组时的宽度缩放因子。默认值为1,表示不进行宽度缩放;可以设置为一个浮点数,表示宽度的缩放因子。
gridsize:可选参数,用于指定核密度估计的网格大小。默认值为100,表示网格大小为100x100;可以设置为一个整数,表示网格大小的值。
width:可选参数,用于指定小提琴图的宽度。默认值为0.8,表示宽度为整个数据范围的80%;可以设置为一个浮点数,表示宽度的比例。
inner:可选参数,用于指定小提琴图内部的表示方式。默认值为"box",表示绘制箱线图;可以设置为"quartile",表示绘制四分位线;可以设置为"point",表示绘制散点图;可以设置为"stick",表示绘制线段。
split:可选参数,用于指定是否将小提琴图的两侧分开显示。默认值为False,表示不分开显示;可以设置为True,表示分开显示。
orient:可选参数,用于指定小提琴图的方向。默认值为"v",表示垂直方向;可以设置为"h",表示水平方向。
palette:可选参数,用于指定颜色调色板。默认值为None,表示使用默认的颜色调色板;可以设置为一个颜色调色板名称或一个颜色列表。
ax:可选参数,用于指定绘制小提琴图的坐标轴对象。默认值为None,表示使用当前坐标轴。
**kwargs:用于传递其他绘图参数,例如图像的标题、标签、颜色等。
【例5.17】使用seaborn绘制平安银行2023年一季度开盘价、收盘价、最高价和最低价的箱线图和小提琴图
代码如下:
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
# 设置为默认字体
plt.rcParams['font.family'] = 'SimHei'
# 显示负数
plt.rcParams['axes.unicode_minus'] = False
# 导入数据
df = pd.read_excel("2023年一季度A股日线行情.xlsx")
# 将日期列转化为日期格式
df["trade_date"] = df["trade_date"].astype("str").apply(lambda x:x[:4]+"-"+x[4:6]+"-"+x[6:])
# 将日期列转换为日期类型,并设置为索引列
df['trade_date'] = pd.to_datetime(df['trade_date'])
df.set_index('trade_date', inplace=True)
# 筛选出股票代码是"000001.SZ"平安的股票
stock = df[df['ts_code'] == '000001.SZ']
# 绘制开盘价、收盘价、最高价、最低价的箱线图
# 设置各个子图的标题
titles = ['open', 'close', 'high', 'low']
# 创建一个2x2的子图布局
fig, ax = plt.subplots(2, 2, figsize=(10, 10))
# 依次创建各个箱线图子图
for i in range(4):
prices = stock[titles[i]]
sns.boxplot(data=prices, ax=ax[i//2][i%2])
ax[i//2][i%2].set_title(titles[i])
ax[i//2][i%2].set_xlabel("Price")
ax[i//2][i%2].set_ylabel("Frequency")
plt.show()
代码运行效果如下图所示:
在【例5.17】代码的基础上补充以下代码:
# 箱线图转化为小提琴图
# 创建一个2x2的子图布局
fig, ax = plt.subplots(2, 2, figsize=(10, 10))
# 依次创建各个子图
for i in range(4):
prices = stock[titles[i]]
sns.violinplot(data=prices, ax=ax[i//2][i%2])
ax[i//2][i%2].set_title(titles[i])
ax[i//2][i%2].set_xlabel("Price")
ax[i//2][i%2].set_ylabel("Frequency")
plt.show()
该代码段的运行效果如下图所示: