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

notion imagenotion image

1.1、安装和导入

pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple import matplotlib.pyplot as plt

1.2、绘图方式

绘制单图时,可使用plt.更便捷;在一个画布内绘制多个子图时建议使用ax.方法
notion imagenotion image

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.绘图

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')
notion imagenotion image
 

其他常见条形图类型

  • 水平条形图
    • 此时,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箱线图

notion imagenotion image
形式:
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
散点的坐标
散点的面积
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:数据处理函数,传入的参数是每个分类上的值
notion imagenotion image
notion imagenotion image
其中每个柱条的黑色的线条为误差线 误差线源于统计学,表示数据误差(或不确定性)范围,以更准确的方式呈现数据。误差线可以用标准差(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()
notion imagenotion image
notion imagenotion image
  • 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 :绘制层次聚类结构图

参考文章:

If you have any questions, please contact me.