seaborn.boxplot
seaborn.boxplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, orient=None, color=None, palette=None, saturation=0.75, width=0.8, dodge=True, fliersize=5, linewidth=None, whis=1.5, ax=None, **kwargs)
绘制箱形图以显示类别的分布。
箱形图(或箱须图)以有助于比较变量之间或分类变量各个级别之间比较的方式显示定量数据的分布。该框显示数据集的四分位数,而晶须延伸以显示其余分布,但使用四分位数间距的函数确定的点被确定为“离群值”的点除外。
输入数据可以多种格式传递,包括:
- 以列表,numpy数组或pandas系列对象表示的数据向量直接传递给x,y和/或hue参数。
- 一个“长格式” DataFrame,在这种情况下,x,y和hue变量将确定如何绘制数据。
- 一个“宽格式” DataFrame,这样将绘制每个数字列。
- 向量的数组或列表。
在大多数情况下,可以使用numpy或Python对象,但最好使用pandas对象,因为关联的名称将用于注释轴。 此外,您可以将分类类型用于分组变量,以控制绘图元素的顺序。
即使数据具有数字或日期类型,此函数也始终将变量之一视为分类变量,并在相关轴上的序数位置(0,1,…n)绘制数据。
参数描述
x,y,数据或矢量数据中变量的色相名称,用于绘制长格式数据的可选输入。请参阅示例以进行解释。
数据:DataFrame,数组或数组列表,用于绘制的可选Dataset。如果x和y不存在,则解释为宽格式。否则,它将是长格式。
order,字符串的hue_orderlists,可选
为了绘制分类级别,否则从数据对象推断级别。orient: “ v” | “ h”,可选
绘图的方向(垂直或水平)。这通常是根据输入变量的dtype推断出来的,但可用于指定“分类”变量是数字时还是绘制宽格式数据时。color matplotlib颜色,可选
所有元素的颜色,或渐变调色板的种子。调色板名称,列表或字典,可选
用于不同级别的色相变量的颜色。应该是可以由color_palette()解释的东西,或者是将色调级别映射到matplotlib颜色的字典。饱和浮动,可选
原始饱和度的绘制颜色比例。大型色块通常看起来带有稍微去饱和的颜色会更好,但是如果您希望绘图颜色与输入颜色规格完全匹配,则将其设置为1。宽度浮动,可选
不使用色调嵌套时的完整元素的宽度,或主要分组变量的一个级别的所有元素的宽度。道奇布尔,可选
使用色相嵌套时,是否应沿分类轴移动元素。fliersizefloat,可选
用于指示异常观测值的标记大小。linewidthfloat,可选
构成图元素的灰线的宽度。whisfloat,可选
IQR超出低四分位数和高四分位数的比例,以扩展情节须。超出此范围的点将被识别为离群值。axmatplotlib轴,可选
轴对象以绘制绘图,否则使用当前轴。kwargskey,值映射
其他关键字参数将传递给matplotlib.axes.Axes.boxplot()。return
axmatplotlib Axes返回绘图的Axes对象
画图
- 绘制简单的单因子箱型图
import seaborn as sns
import pandas as pd
#sns.set_style("whitegrid")
tips = pd.read_csv(r'tips.csv')
# 绘制箱线图
ax = sns.boxplot(x=tips["total_bill"])
- 将x换为y
import seaborn as sns
import pandas as pd
#sns.set_style("whitegrid")
tips = pd.read_csv(r'tips.csv')
# 竖着放的箱线图,也就是将x换成y
ax = sns.boxplot(y=tips["total_bill"])
- 分组绘制箱型图
import seaborn as sns
import pandas as pd
#sns.set_style("whitegrid")
tips = pd.read_csv(r'E:/software/python/data/tips.csv')
# 分组绘制箱线图,分组因子是day,在x轴不同位置绘制
ax = sns.boxplot(x="day", y="total_bill", data=tips)
- 分组绘制的高级版(分组之上再分组)
import seaborn as sns
import pandas as pd
#sns.set_style("whitegrid")
tips = pd.read_csv(r'E:/software/python/data/tips.csv')
# 分组箱线图,分子因子是smoker,不同的因子用不同颜色区分
# 相当于分组之后又分组
ax = sns.boxplot(x="day", y="total_bill", hue="smoker",
data=tips, palette="Set3")
总结
matplotlib也可以画箱型图,只是没有seaborn简单方便。以下例子可以真实感受:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame(np.random.rand(10, 5), columns=['A', 'B', 'C', 'D', 'E'])
plt.figure(figsize=(10,4))
# 创建图表、数据
f = df.boxplot(sym = 'o', # 异常点形状,参考marker
vert = True, # 是否垂直
whis = 1.5, # IQR,默认1.5,也可以设置区间比如[5,95],代表强制上下边缘为数据95%和5%位置
patch_artist = True, # 上下四分位框内是否填充,True为填充
meanline = False, showmeans=True, # 是否有均值线及其形状
showbox = True, # 是否显示箱线
showcaps = True, # 是否显示边缘线
showfliers = True, # 是否显示异常值
notch = False, # 中间箱体是否缺口
return_type='dict' # 返回类型为字典
)
plt.title('boxplot')
#print(f)
for box in f['boxes']:
box.set( color='b', linewidth=1) # 箱体边框颜色
box.set( facecolor = 'b' ,alpha=0.5) # 箱体内部填充颜色
for whisker in f['whiskers']:
whisker.set(color='k', linewidth=0.5,linestyle='-')
for cap in f['caps']:
cap.set(color='gray', linewidth=2)
for median in f['medians']:
median.set(color='DarkBlue', linewidth=2)
for flier in f['fliers']:
flier.set(marker='o', color='y', alpha=0.5)
# boxes, 箱线
# medians, 中位值的横线,
# whiskers, 从box到error bar之间的竖线.
# fliers, 异常值
# caps, error bar横线
# means, 均值的横线
怎么在seaborn下把图片保存下来
import seaborn as sns
import pandas as pd
#sns.set_style("whitegrid")
tips = pd.read_csv(r'E:/software/python/data/tips.csv')
# 分组绘制箱线图,分组因子是day,在x轴不同位置绘制
ax = sns.boxplot(x="day", y="total_bill", data=tips)
fig = ax.get_figure()
fig.savefig("fig.png")