Matplotlib & Seaborn 速查
type
Post
status
Published
summary
数据分析可视化一直是短板,完全是因为不怎么用的缘故。把常用的方法整理一遍,以便用时查询。Seaborn基于 matplotlib 进一步封装。
slug
matplotlib&seaborn
date
Oct 27, 2023
tags
Python数据处理三板斧
matplotlib
seaborn
可视化
category
机器学习
password
icon
URL
Property
Feb 28, 2024 12:31 PM
一、Matplotlib
1.1、安装和导入
pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple import matplotlib.pyplot as plt
1.2、绘图方式
绘制单图时,可使用plt.更便捷;在一个画布内绘制多个子图时建议使用ax.方法
1.2.1、plt.绘图
plt绘制单图
fig=plt.figure(num=1,figsize=(4,4)) # 创建4*4的画布 plt.plot([1,2,3,4],[1,2,3,4]) # 在整块画布上作图 plt.xlabel('产品') # 设置x坐标轴名称 plt.ylabel('销量') # 设置y坐标轴名称 plt.xlim((1,10)) # 设置x坐标轴范围 plt.ylim((100,1000)) # 设置y坐标轴范围 plt.xticks(range(1,11,1)) # 设置x轴刻度 plt.yticks(range(100,1001,100)) # 设置y轴刻度 plt.show()
plt绘制多图
fig=plt.figure(num=1,figsize=(12,4)) # 创建12*4的画布 plt.subplot(121) # 在画布上圈出一个1*1的区域(111的含义:前两个1表示子图的形状1*1,最后一个1表示当前是第一个子图) plt.plot([1,2,3,4],[1,2,3,4]) # 在圈出的区域上作图 plt.subplot(122) plt.plot([1,2,3,4],[4,3,2,1]) plt.show() # 相应的坐标名称、范围、刻度方法与单图一致
这种方式虽然也能绘制多图,但是后面想要修改子图就会比较麻烦。更多修改细节参考:Matplotlib坐标轴设置
1.2.2、ax.绘图
更多设置参考:python matplotlib.axes相关属性设置
import matplotlib.pyplot as plt fig = plt.figure(figsize=(12,3)) # 创建指定大小的画布 ax1 = fig.add_subplot(121) # 创建1行2列,第一个绘画区域 ax1.plot(epochs, train_loss, label='train_loss') ax1.plot(epochs, val_loss, label='val_loss') ax1.legend() # 设置一个图例 ax1.set_title('training and valide loss') # 为轴设置标题 ax1.set_xlim(1,7.1) # 设置x轴范围 ax1.set_ylim(40,100) # 设置y轴范围 ax1.set_xlabel() # 设置x轴的标签 ax1.set_ylabel() # 设置y轴的标签 ax1.set_xticks(np.linspace(1,7,7)) # 设置xaxis的刻度;np.linspace()函数为等差数列,1至7的7个数组成的等差数列 ax1.set_yticks(np.linspace(50,100,6)) # 设置yaxis的刻度;50到100里面的6个等差数组成的数组 # 设置刻度的标签 ax1.set_xticklabels(["A","B","C"],fontproperties="SimHei",fontsize=12,rotation=10) # fontproperties可以单独设置x轴标签的字体,可以用fontsize设置字体大小,可以用color设置字的颜色,rotation旋转角度 ax1.set_yticklebels(["50kg","60kg","70kg","80kg","90kg","100kg"],fontsize=12) ax2 = fig.add_subplot(122) # 创建1行2列,第二个绘画区域 ax2.plot(epochs, train_acc, label='train_acc') ax2.plot(epochs, val_acc, label='val_acc') # 其他设置同上
1.3、绘图时的不常用属性设置
# 设置显示中文 plt.rcParams["font.family"]="SimHei" # 字体设置为“SimHei”中文黑体;常用字体Kaiti,LiSu,FangSong,YouYuan,STSong(华文宋体) plt.rcParams["font.style"]="normal" # 字体风格,normal标准,italic斜体 plt.rcParams["font.size"]="normal" # 字体大小,整数字号或'lager','x-small' plt.rcParams['font.sans-serif']=['SimHei'] # 替换sans-serif字体 plt.rcParams['axes.unicode_minus']=False # 解决坐标轴负数的负号显示问题 # mac下可用字体 plt.rcParams["font.family"] = 'Arial Unicode MS' # 修改刻度线和轴标签样式 ax.tick_params() # 更改刻度线,刻度线标签和网格线的外观 参数: axis: 可选"x","y","both",默认"both",分别代表,对x轴操作,对y轴操作,对两个轴都操作。 direction: 可选 "in","out","inout"代表,刻度线显示在坐标轴里面,坐标轴外边,双边 length: 刻度线长度,上面图里的刻度线长度,我设置的为6 color: 刻度线颜色,上面图里的刻度线颜色,我设置的为“r” width: 刻度线宽度 pad: 刻度线与刻度标签之间的间隔 bottom, top, left, right 四个参数对应四个边框,它们的取值为布尔类型,True 表示显示对应边框上的刻度线,False,代表不显示,默认True labelbottom, labeltop, labelleft, labelright 与上面四个对应,代表的是四个边框上的类标的设置,取值为布尔类型,True代表显示对应边框上的类标,False代表不显示。 labelsize: 类标大小的设置参数,可取浮点型数值,也可去"medium","large","small" labelrotation: 旋转类标一定的角度,与在set_xticklabels()中的参数rotation作用相同。 # 设置表头 ax.set_title("标题") # 设置标题 参数: fontsize 默认12,可选参数还有['xx-small', 'x-small', 'small', 'medium', 'large','x-large', 'xx-large'] backgroundcolor 背景颜色 fontweight 字体粗细,可选参数为['light', 'normal', 'medium', 'semibold', 'bold', 'heavy', 'black'] color 字体颜色 fontstyle 设置字体类型,可选参数[ 'normal' | 'italic' | 'oblique' ],italic斜体,oblique倾斜 verticalalignment 设置水平对齐方式 ,可选参数 : 'center' , 'top' , 'bottom' ,'baseline' # 设置图例 ax.legend(("苹果"),loc=3,labelspacing=2,handlelength=4,fontsize=14,shadow=True) 说明:一般添加图例时,会在画图的函数里,比如ax.plot()函数中添加一个label参数,则后面直接ax.legend(loc="")不需要第一个参数了。 参数: loc 可取"best"、"upper right"、"upper left"、"lower left"、"lower right"代表放不同位置 fontsize int或float或{‘xx-small’, ‘x-small’, ‘small’, ‘medium’, ‘large’, ‘x-large’, ‘xx-large’},字体大小 shadow 是否为图例边框添加阴影 labelspacing 图例中条目之间的距离 handlelength 图例句柄的长度 # 在图中指定位置添加标签 ax.text() 参数: x, y: 放置text的位置,横纵坐标。 s: str,text内容。 fontsize: 设置字体大小,默认12,可选参数 [‘xx-small’, ‘x-small’, ‘small’, ‘medium’, ‘large’,‘x-large’, ‘xx-large’] fontweight: 设置字体粗细,可选参数 [‘light’, ‘normal’, ‘medium’, ‘semibold’, ‘bold’, ‘heavy’, ‘black’] alpha: 透明度,参数值0至1之间。 rotation: (旋转角度)可选参数为:vertical,horizontal 也可以为数字。 backgroundcolor: 背景颜色。 color: 字体颜色。 # 在图中指定位置添加箭头标签 ax.annotate() 参数: s: 添加标注的内容,字符串形式。 xy: 箭头指向的位置,就是我们想添加标注的对象,元组类型输入方式。 xytext: 添加标注的实际位置,标注实际所在位置,可看做箭头输出端。 arrowprops: 此参数中提供箭头属性字典来绘制从文本到注释点的箭头。 width : 箭把宽度,整数或浮点数。 frac: 箭头头部所占的比例,小于1。 headwidth: 箭头头部宽度,整数或浮点数。 headlength: 箭头长度,整数或浮点数。 facecolor: 箭头填充色 。 shrink: 箭头移动提示,并使其离注释点和文本一些距离,<1,大白话说就是,别让箭头两端里标注点和文本太近。 frontsize: 可以设置字大小, 实例: ax.annotate(s="min:70",xy=(1,70),xytext=(1.3,66),arrowprops=dict(facecolor="y",shrink=0.05,headwidth=12,headlength=6,width=4),fontsize=12) # 设置网格线 ax.grid(color="r",linestyle="--",linewidth=1,alpha=0.3)#同时设置两个轴上的网格线 ax.yaxis.grid(color="r",linestyle="--",linwidth=1,alpha=0.3)#直对y轴设置 ax.xaxis.grid(color="r",linestyle="--",linewidth=1,alpha=0.3)#支队x轴设置 color:网格线颜色。 linestyle:网格线类型,“-”,“--”。 linewidth:网格线宽度。 alpha:网格线透明度。 # 保存图片 plt.savefig("figure.png") plt.savefig("figure.jpg")
1.4、.plot折线图
形式:
ax.plot(x,y,format_string,label)
参数:
x: x轴数据,列表或数组,可选参数,当我们在这个函数里,只展示一组数据时,x可省略。 y: y轴数据,必须有。 format_string:主要来控制我们画的曲线的格式:颜色,风格,标记,可取三者的组合如:“g-o”,"r-.D" 如果不用组合,则用color,marker,linestyle,三个参数分别指定,常见值有: color颜色:'b' 蓝色, 'g' 绿色, 'r' 红色, 'c' 青绿色, '#008000' RGB颜色值, 'm' 洋红色, 'y' 黄色, 'k' 黑色, 'w' 白色, '0.8' 灰度值 marker风格:'-' 实线, '-.' 点划线, '--' 破折线, ':' 虚线, '', ' ' 无线条 linestyle标记:'.' ',' 'o' 'v' '^' '>' '<' '1' '2' '3' '4' 's' 'p' '*' 'h' 'H' '+' 'x' 'd' 'D' '|' label: 添加图例的类标。
示例:
ax.plot(x,app,"r-.d",label="苹果")
1.5、.bar条形图
1.5.1、常规条形图绘制
形式:
ax.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)
参数:
参数 | 说明 | 类型 |
x | x坐标 | int,float |
height | 条形的高度 | int,float |
width | 宽度 | 0~1,默认0.8 |
orientation | 是竖直条还是水平条 | 竖直:"vertical",水平条:"horizontal" |
log | y轴使用科学计算法表示 | bool |
tick_label | 下标的标签 | 可以是元组类型的字符组合 |
linewidth | 边框的宽度 | 像素,默认无,int |
edgecolor | 边框的颜色 | 同上 |
color | 条形的颜色 | “r","b","g","#123465",默认“b" |
align | 条形的中心位置 | “center”,"lege"边缘 |
botton | 条形的起始位置 | 也是y轴的起始坐标 |
alpha | 条形透明度 | 0~1,默认1 |
label | 图例说明 | str |
示例:
ax.bar(x=np.arange(1,14,2),height=app,color=["mistyrose","lightcoral","indianred","firebrick","brown","darkred","maroon"],bottom=0,edgecolor="gold",label="苹果",linewidth=2,width=1,alpha=1) # color有多个值,意思是为每一个条形填充不同的颜色
其他:
如果是连续型数据想绘制条形图,可以先用 pandas 的 cut 方法将连续数据进行区间切割,然后对每个区间的数据进行绘制;
绘制过程中如果想把条形图的位置挪到两个刻度中间,则需要绘制前对 x 轴的刻度进行调整(将所有 x 轴的刻度减去相同的值,相当于左移)
# 实战案例:每个标签下的套餐费用区间分布 fig = plt.figure(figsize=(25,5)) for i in range(1,3,1): plt.subplot(120+i) plt_df = pd.cut(data.query(f'IF_NEWADD_BRODBD_USER=={i-1}')['plan_fee_new'], bins=[i for i in range(-1,201,10)], # 分割的区间:(-1,10],(10,20]……因为是左开右闭,所以如果想把0包含进来就需要从-1 开始 labels=[i for i in range(10,201,10)] # 分割后的标签,后面作为画图的横坐标值 ).value_counts().reset_index().sort_index() plt.bar([i-5 for i in plt_df['index']], plt_df['plan_fee_new'], width=6) # 左移条形图的位置到刻度中间 plt.xticks(range(0,201,10)) plt.title(f'IF_NEWADD_BRODBD_USER={i-1}') plt.xlabel('套餐费用') plt.ylabel('count')
其他常见条形图类型
- 水平条形图
- 此时,x轴从0画,height代表的是水平条形的宽度,bottom代表的是水平条出发的位置,width代表的是水平轴的水平高度,其他参数正常。
ax.bar(x=0,height=1,bottom=np.arange(1,14,2),edgecolor="gold",label="苹果",linewidth=2,width=app,orientation="horizontal")
- 并列条形图
- 与简单条形图的本质一样,找准每个条形图该在的位置即可,并列一般做法就是把第二种物质的条形图的中心位置放在第一个相应的条形图的中心位置靠右一个条形宽度即可
ax=fig.add_subplot(111) ax.bar(x=np.arange(1,14,2),height=app,color="firebrick",bottom=0,edgecolor="gold",label="苹果",linewidth=2,width=0.8,alpha=1) ax.bar(x=np.arange(1+0.8,14+0.8,2),height=ban,color="y",bottom=0,edgecolor="gold",label="苹果",linewidth=2,width=0.8,alpha=1)
- 叠加条形图
- 横坐标相同
- 第二组的纵坐标的起始高度为第一组数据的高度,用参数bottom控制
ax=fig.add_subplot(111) ax.bar(x=np.arange(1,8),height=y,color="r") ax.bar(x=np.arange(1,8),height=np.arange(1,8),color="y",bottom=y)
- 对比条形图
1.6、.boxplot箱线图
形式:
ax.boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None, bootstrap=None, usermedians=None, conf_intervals=None, meanline=None, showmeans=None, showcaps=None, showbox=None, showfliers=None, boxprops=None, labels=None, flierprops=None, medianprops=None, meanprops=None, capprops=None, whiskerprops=None, manage_ticks=True, autorange=False, zorder=None, *, data=None)
参数:
参数 | 含义 | 取值 |
x | 一维数组(列表)或多维数组(列表),多维的代表一个图里画多个箱线图 | ㅤ |
notch=None | 是否是凹口的形式展现箱线图 | bool,默认False |
sym=None | 指定异常点的形状 | str,默认'+' |
vert=None | 是否需要将箱线图垂直摆放 | bool,默认True |
whis=None | 指定上下须与上下四分位的距离 | flot,默认1.5 |
positions=None | 指定箱线图的位置 | list,默认[0,1,2…] |
widths=None | 指定箱线图的宽度 | flot,默认0.5 |
patch_artist=None | 是否填充箱体的颜色 | bool,默认True |
meanline=None | 是否用线的形式表示均值,默认用点来表示 | showmeans为True时,此参数才有意义,若为False,则显示为一个三角形 |
showmeans=None | 是否显示均值 | bool,默认False |
showcaps=None | 是否显示箱线图顶端和末端的两条线 | bool,默认True |
showbox=None | 是否显示箱线图的箱体 | bool,默认True |
showfliers=None | 是否显示异常值 | bool,默认True |
boxprops=None | 设置箱体的属性,如边框色,填充色等 | 同capprops,有一个附加参数facecolor箱体填充色,只有patchartist为True时才有效。 |
labels=None | 为箱线图添加标签,类似于图例的作用 | list, |
flierprops=None | 设置异常值的属性,如异常点的形状、大小、填充色等 | dict,marker,markerfacecolor,markersize,linestyle |
medianprops=None | 设置中位数的属性,如线的类型、粗细等 | 同capprops |
meanprops=None | 设置均值的属性,如点的大小、颜色等 | 同capprops |
capprops=None | 设置箱线图顶端和末端线条的属性,风格,粗细,颜色等 | dict,linestyle,linewidth,color |
whiskerprops=None | 设置须的属性,如颜色、粗细、线的类型等 | 同capprops |
- 并列箱线图
- 多个箱线图并列的方法,就是将多个数据组成一个列表,传给x参数即可
plt.boxplot([x1,x2,x3...xn],labels=["x1分布","x2分布","x3分布",...,"xn分布"])
- DataFrame数据直接画箱线图
data=pd.DataFrame({"b1":b1,"b2":b2,"b3":b3,"b4":b4,"b6":b6}) data.boxplot(column=["b1","b2"],showmeans=True,grid=False,fontsize=12,figsize=(8,4),widths=[0.3,0.3]) # grid:是否显示网格线 # showmeans:是否显示字段名
1.7、散点图
形式:
ax.scatter(x, y, s=None, c=None, marker=None)
参数(部分):
参数 | 含义 | 默认值 | 取值 |
x, y | 散点的坐标 | ㅤ | ㅤ |
s | 散点的面积 | 20 | ㅤ |
c | 散点的颜色 | 蓝色'b' | 'r', 'w', 'k'黑色, 'g', 'y' |
marker | 散点的样式 | 实心圆'o' | ‘v’倒三角,‘^’正三角,‘s’正方形,‘*’星形等等 |
alpha | 散点的透明度 | None | [0, 1]之间的数,0表示完全透明,1则表示完全不透明 |
linewidths | 散点的边缘线宽 | 1.5 | ㅤ |
edgecolors | 散点的边缘颜色 | 'face'与散点一致 | ㅤ |
实例:
import matplotlib.pyplot as plt import numpy as np # Fixing random state for reproducibility np.random.seed(19680801) N = 50 x = np.random.rand(N) y = np.random.rand(N) colors = np.random.rand(N) area = (30 * np.random.rand(N))**2 # 0 to 15 point radii plt.scatter(x, y, s=area, c=colors, alpha=0.5) plt.show()
1.8、饼图
形式:
ax.pie(x, labels=labels, autopct='%1.1f%%', explode = (0, 0.1, 0, 0), shadow=True) # 如果是一组数值,会自动换算成百分比绘图
参数:
参数 | 含义 | 取值 |
x | 指定绘图的数据 | ㅤ |
explode | 指定饼图某些部分的突出显示,即呈现爆炸式; | 一般设置explode=(0,0.1)比较合理 |
labels | 为饼图添加标签说明,类似于图例说明 | ㅤ |
colors | 指定饼图的填充色 | ㅤ |
autopct | 自动添加百分比显示,可以采用格式化的方法显示; | autopct='%1.1f%%' |
pctdistance | 设置百分比标签与圆心的距离 | ㅤ |
shadow | 是否添加饼图的阴影效果 | ㅤ |
labeldistance | 设置各扇形标签(图例)与圆心的距离 | ㅤ |
startangle | 设置饼图的初始摆放角度 | ㅤ |
radius | 设置饼图的半径大小 | ㅤ |
counterclock | 是否让饼图按逆时针顺序呈现 | ㅤ |
wedgeprops | 设置饼图中文本的属性,如字体大小、颜色等 | ㅤ |
center | 指定饼图的中心点位置,默认为原点 | ㅤ |
frame | 是否要显示饼图背后的图框,如果设置为True的话,需要同时控制图框x轴、y轴的范围和饼图的中心位置。 | ㅤ |
实例:
labels = 'Frogs', 'Hogs', 'Dogs', 'Logs' sizes = [15, 30, 45, 11] fig, ax = plt.subplots() ax.pie(sizes, labels=labels, autopct='%1.1f%%', explode = (0, 0.1, 0, 0), shadow=True)
参考文章:
二、seaborn
2.1、Axes-level API(部分)
2.1.1、lineplot
import seaborn as sns flights = sns.load_dataset('flights') # flights_ = flights.pivot(index='year', columns='month', values='passengers') sns.set() # 设置绘图风格 sns.lineplot(data=flights, x="year", y="passengers", hue="month", style="month") """ data:数据,如果数据是一个Series,可以不用指定x和y,此时横坐标是Series的index x、y:字段名 hue: species 不同的数据将用不同的颜色标记 style:petal_width 不同的数据将用不同的形状标记 """
2.1.2、scatterplot
import seaborn as sns iris = sns.load_dataset('iris') sns.set() # 设置绘图风格 sns.scatterplot(data=iris, x='sepal_length', y='sepal_width', hue='species', style='petal_width', size='petal_length') """ data:数据,如果数据是一个Series,可以不用指定x和y,此时横坐标是Series的index x、y:字段名 hue: species 不同的数据将用不同的颜色标记 style:petal_width 不同的数据将用不同的形状标记 size: petal_length 不同的数据将用不同的大小标记 """
2.1.3、barplot
seaborn.barplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None,\ estimator=<function mean>,ci=95, n_boot=1000, units=None, orient=None,\ color=None, palette=None, saturation=0.75,\ errcolor='.26', errwidth=None, capsize=None, dodge=True, ax=None, **kwargs)
向量数据绘图(列表,array,Series)
plt.figure(dpi=150) x = ['金融','农业','制造业','新能源'] y = [164, 86, 126, 53] sns.barplot(x, y, order=['金融','制造业','农业','新能源'], saturation=0.2, alpha=0.3) # order:调整图形顺序 # saturation:调整图形饱和度 # alpha:图形透明度
用DataFrame绘图
tips = sns.load_dataset('tips') tips.head() sns.barplot(x='day', y='tip', data=tips, hue='sex') # x,y互换,可以实现角度翻转 sns.barplot(y='day', x='tip', data=tips, hue='sex') # palette调色盘控制图形色系 sns.barplot(x = 'size', y = 'tip', data = tips, palette="Blues_d") # 设置误差线的样式 sns.barplot(x = 'size', y = 'tip', data = tips, palette="plasma_r", errcolor='yellow', errwidth=2, capsize=0.1) # errcolor:颜色 # errwidth:宽度 # capsize:端点长度 # estimator:数据处理函数,传入的参数是每个分类上的值
其中每个柱条的黑色的线条为误差线
误差线源于统计学,表示数据误差(或不确定性)范围,以更准确的方式呈现数据。误差线可以用标准差(standard deviation,SD)、标准误(standard error,SE)和置信区间表示,使用时可选用任意一种表示方法并作相应说明即可。当误差线比较“长”时,一般要么是数据离散程度大,要么是数据样本少。
2.2、Figure-level API(部分)
2.2.1、关联图
relplot :
relplot
看作是 scatterplot
和 lineplot
的结合版本import seaborn as sns iris = sns.load_dataset('iris') sns.set() # 设置绘图风格 sns.relplot(data=iris, x="sepal_length", y="petal_length", hue="species", style="species", size='species') """ data:数据,如果数据是一个Series,可以不用指定x和y,此时横坐标是Series的index x、y:字段名 hue: species 不同的数据将用不同的颜色标记 style:petal_width 不同的数据将用不同的形状标记 size: petal_length 不同的数据将用不同的大小标记 kind:控制图像类型,默认是散点图,kind='line'折线图(只有这两个选项) """
2.2.2、类别图
import seaborn as sns iris = sns.load_dataset('iris') sns.set() # 设置绘图风格 sns.catplot(data=iris, x="sepal_length", y="species", hue='species') sns.catplot(data=iris, x="sepal_length", y="species", hue='species', kind="swarm") """ data:数据,如果数据是一个Series,可以不用指定x和y,此时横坐标是Series的index x、y:字段名 hue: species 不同的数据将用不同的颜色标记 kind:控制图像类型 strip:默认,散点图, swarm:防止重叠,可以更好地观测数据分布 box:箱线图 boxen:增强箱线图 violin:小提琴图 point:点线图 bar:条形图 count:统计图 """
2.2.3、分布图
- distplot:直方图并拟合核密度估计图;即将在0.14中弃用,可选择displot或histplot函数代替
- kdeplot:可以专门用于绘制核密度估计图
是用该方法时,使用整个 df 进行画图和使用某一列进行画图,画出来的结果是不同的。
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # 示例数据 df = pd.DataFrame({'type': {0: 'a', 1: 'b', 2: 'b', 3: 'c', 4: 'c'}, 'IR': {0: 0.1, 1: 0.3, 2: 0.2, 3: 0.8, 4: 0.5}}) # 绘图对比 sns.kdeplot(df,x='IR', hue='type') # 整体数据,根据type区分,'IR'为横坐标 plt.show() sns.kdeplot(df.query('type=="b"')['IR']) # 只要type=b的数据,'IR'为横坐标 plt.show()
- jointplot:二元变量分布图,探索二元特征变量之间的关系
import seaborn as sns iris = sns.load_dataset('iris') sns.set() # 设置绘图风格 sns.jointplot(data=iris, x="sepal_length", y="sepal_width", hue='species') """ data:数据 x、y:字段名 hue: species 不同的数据将用不同的颜色标记 kind:控制图像类型 scatter:默认,散点图, kde:核密度估计 其他: """
- pairplot:一次性将数据集中的特征变量两两对比绘图,默认情况下,对角线上是单变量分布图,而其他则是二元变量分布图。
import seaborn as sns iris = sns.load_dataset('iris') sns.set() # 设置绘图风格 sns.pairplot(iris, hue="species")
2.2.4、回归图
regplot:指定自变量和因变量即可
import seaborn as sns mpg = sns.load_dataset("mpg") sns.set() # 设置绘图风格 # sns.regplot(data=mpg, x="weight", y="mpg", order=2) # 拟合高阶多项式回归来捕获非线性趋势 # sns.regplot(data=mpg, x="horsepower", y="weight", robust=True) # 拟合稳健回归以减轻异常值的影响(需额外安装依赖包) # sns.regplot(data=mpg, x="horsepower", y="mpg", lowess=True) # 使用局部加权(LOWESS)平滑器(需额外安装依赖包) # sns.regplot(data=mpg, x="displacement", y="mpg", logx=True) # 拟合对数线性回归 sns.regplot(data=mpg, x="weight", y="horsepower", ci=None) # 禁用置信区间以加快绘图速度
lmplot 支持引入第三维度进行对比
import seaborn as sns iris = sns.load_dataset('iris') sns.set() # 设置绘图风格 sns.lmplot(x="sepal_length", y="sepal_width", hue="species", data=iris)
2.2.5、矩阵图
heatmap:热力图
import seaborn as sns glue = sns.load_dataset("glue") glue = glue.pivot(index="Model", columns="Task", values="Score") # pivot 函数详解 sns.set() # 设置绘图风格 # sns.heatmap(glue, annot=True, fmt=".1f") # annot:是否显示数值;fmt:浮点数位数 sns.heatmap(glue, annot=glue.rank(axis="columns")) # annot:显示横向排序后的序列标号;
import matplotlib.pyplot as plt import seaborn as sns plt.figure(figsize=(20, 16)) # 指定绘图对象宽度和高度 # 计算相关系数作为热力图数据 mcorr = data_train.corr(method="spearman") # 相关系数矩阵,即给出了任意两个变量之间的相关系数 # 设置遮掩序列 mask = np.zeros_like(mcorr, dtype=bool) # 构造与mcorr同维数矩阵 为bool型 mask[np.triu_indices_from(mask)] = True # 角分线右侧为True # 设置色彩 cmap = sns.diverging_palette(220, 10, as_cmap=True) # 返回matplotlib colormap对象 g = sns.heatmap(mcorr, mask=mask, cmap=cmap, square=True, annot=True, fmt='0.2f') # 热力图(看两两相似度) # annot=True,显示数据值 plt.show()
clustermap :绘制层次聚类结构图