从0开始学习Matplotlib与Seaborn
Matplotlib学习笔记
由基础绘图开始学起
涉及中文标签时需设定中文字体以正常显示中文标签,如下
#配置中文字体,一般为SimHei或微软雅黑Microsoft YaHei即可正常显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
图表参数
图表绘制
1.IPython魔法命令
%matplotlib inline
,可以在notebook中显示绘制的图表
2.plt.subplots()命令创建一个Figure和Axes,figure是绘制窗口,axes是绘图坐标系
Figure:顶层级,所有图表的容器,可容纳多个Axes
Axes:坐标系,对应我们画的每一个图表,在Axes中可以对图表的Axis和Tick做操作
3.条形图bar翻转轴后,参数width自动变成height
- plt.plot()折线图参数
- linewidth:配置线宽
- linestyle:配置线型
- linestyle线型参数详情:
linestyle 简写 ‘solid’(default) ‘-‘ ‘dotted’ ‘:’ ‘dashed’ ‘–’ ‘dashdot’ ‘-.’ ‘None’ ‘’或’ ‘
- marker:折线图折点配置
- markersize:折点大小配置
- 面积图:stackplot()
- 面积图实际为折线图的另类显示,相当于对折线图进行区域颜色填充
- pie()饼图参数
autopct
:设置数值格式explode
:将某部分分离强调,intlabeldistance
:配置轴标签显示位置,intpctdistance
:配置数值标签显示位置,intwedgeprops
:配置环形图,包含’width’,’linewidth’,’edgecolor’三个参数,width为配置环形图宽度,linewidth为配置边缘线宽度,edgecolor为配置边缘线颜色为str格式
- scatter()散点图/气泡图参数
x,y
:x/y 轴对应的数据s
:散点面积,为标量或者等长的数组,c
:散点颜色,为指定的色彩、数值序列或者颜色序列marker
:配置标记点形状,默认为圆圈cmap
:仅当c参数为颜色序列的时候使用aplha
:透明图设置,在显示多个变量的场景下为了能够显示堆叠的散点,可以设置该参数。取值范围[0,1]norm
:仅当c为数值序列的时候,通过colors.Normalize将值进行正则化linewidths
:散点标记的边界的宽度。edgecolors
:散点标记的边界的颜色。
- plt.figure(figsize=(x,y))意为创建长x英寸,宽y英寸的画布
图内配置
- 双轴
- plt.twinx()添加次坐标轴
- twinx()或twiny()生成共享x轴或y轴的新的axes,若通过plt.subplots()生成ax后,再绘制折线图时,需在这个新生成的ax上绘制
- 添加阴影
- 先import matplotlib.patheffects as path_effects
- 在绘图代码中添加参数:path_effects=[]
- plt.annotate()添加标记
xy
,需要传入的数组,如xy=(1,2),用于定位标记位置xycoords
,设置xy是通过何种方式去定位,如xycoords=’data’表示使用坐标轴刻度去进行定位xytext
,提示文本需要展示的位置textcoords
,同xycoords
,设置xytext通过何种方式定位- xycoords,textcoords参数:
参数值 含义 figure points 以画布左下为参考,单位为点数 figure pixels 同上,单位为像素数 figure fraction 同上,单位为百分比 axes points 以子图为参考,单位为点数,默认为1个 axes pixels 同上,单位为像素 axes fraction 同上,单位为百分比 data 默认值,以坐标点为参考 polar 使用极坐标系
arrowprops
,箭头的样式配置- arrowprops参数:
参数值 含义 width 宽度 frac 箭头占整个长度的百分比 headwidth 箭头头部宽度 shrink 箭头两端收缩百分比 **kwargs 任何matplotlib.patches.FancyArrowPatch的关键字
- arrowprops参数:
- Matplotlib中的很多内置配色方法,可以通过matplotlib.cm.get_camp使用
全局配置
中文字体中可配置Simsun(宋体),SimHei(黑体),Kaiti(楷体)及Microsoft YaHei(微软雅黑)
plt.title()设置标题参数
- fontdict = {},可配置
family,size,color
等 - loc,设置标题位置,如
center,left,right
- plt.xlabel(),x.ylabel()设置x轴y轴标题参数
- fontdict = {}
- labelpad,轴与轴标题间距
- plt.legend()添加图例参数
- loc,可选参数’best’,表示自动选择最优位置
- fontsize,字体大小
- plt.text()显示数据标签
- 三个重要参数:
- x,确定x轴位置
- y,确定y轴位置
- s,需显示的文本
- 即通过xy确定位置显示s
- va与ha,设置文本显示位置
- fontdict = {}
- plt.grid()添加网格线
- b,b = True时显示网格线
- axis,’y’,’x’,’both’,分别为展示横网格线,纵网格线以及都显示
- linestyle
- linewidth
- color
plt.xlim(),plt.ylim()坐标轴范围:
参数即为范围,如:
plt.ylim(50,300) #意为y轴坐标轴范围为50-300
图表主题
- plt.style.use()设置风格
- 可以通过print(plt.style.available)显示所有风格
多图组合图
- plt.subplot(2,2,1)指将整块画布划分为2*2块区域,并置顶第一块作图
- 另一种组合作图方式:
fig,axs = plt.subplot(2,2) axs[0][0].bar(...) axs[1][0].plot(...)
- 不等大小多图组合
- add_subplot():添加至subplot区域
- add_gridspec():将整个画布划分为不均匀区域,如
spec = fig.add_gridspec(nrows=2,ncols=2,width_ratios=[1,3],height_ratio=[1,2]) #表示将整个画布划分为2*2,width_ratios=[1,3]意为将两列宽度按1:3裁剪,同理可得height_ratios
- spec支持切片,如,将第二行展示为整个图
ax = fig.add_subplot(spec[1,:])
- spec支持切片,如,将第二行展示为整个图
- 子图同样可以通过set_title,set_xlabel等设置子图标题轴标题等
- 添加大标题需通过fig.suptitle()实现
Seaborn学习笔记
Seaborn基础
由于Seaborn是基于matplotlib的可视化图形库,因此在notebook中使用Seaborn前也需运行魔法命令
%matplotlib inline
sns.load_dataset()其实就是一个Pandas.DataFrame
Seaborn中提供的图表包含两个层级–figure-level和axes-level,axes-level的图表只会在一个单独的matplotlib.pyplot.Axes进行图表的绘制,而figure-level是基于Seaborn的对象,也就是axes-level的Seaborn图表再结合matplotlib的接口开发实现的
- Seaborn图表层级如下:
开始绘图
- 依据个人理解进行Seaborn可视化的系统性整理
- Seaborn几乎所有的绘制函数都有以下的几个参数
参数 含义 kind 配置绘制图形的种类,str,如line/scatter/boxen等 hue 根据字段配置以区分颜色,str,选取data中的某一字段 size 根据字段配置以区分数值大小,str,选取data中的某一字段 style 根据字段配置以区分点样式,str,选取data中的某一字段
- 在开始绘图前,将Seaborn图表类型分为四部分
- 数值相关型
相关性分析的图表通常会使用figure-level层级的relplot(),也可以使用axes-level的scatterplot(),lineplot()进行绘制
- 在折线图中,对于复杂的数据(往往会出现一个x对应多个y),seaborn会自动绘制置信区间(默认为95%),计算置信区间可能非常耗时,可以通过ci=None来去掉
- 数据分布型
分布型图表通常使用figure-level层级的displot(),在不设定kind参数时默认显示histplot()直方图,axes-level层级包含有:histplot()直方图,kedplot()核密度分布图,ecdfplot()累积概率密度图,除此之外还有rugplot(),与前三者不同的是rugplot()可以添加至以上任意图表
- displot(kind=’hist’),histplot()直方图
- displot(kind=’hist’),histplot()的条件数据区间划分:
- binwidth,通过此参数设置bin的宽度
- bins,通过此参数设置包含bin的个数
- seaborn中默认不同的直方图是重叠显示的,如需数据堆叠可以设置nultiple参数
- nultiple = ‘stack’,意为堆叠显示直方图
- displot(kind=’hist’),histplot()的条件数据区间划分:
- displot(kind=’kde’),kdeplot()
- 核密度图设置平滑程度(在y参数未赋值前是折线图):
- bw_adjust,调节图表平滑程度
- 热力核密度图:
- fill = True,bool
- 核密度图设置平滑程度(在y参数未赋值前是折线图):
- 在displot()中赋值x,y后,默认显示热力图(?)
- 热力图添加色块:
- cbar = True,bool
- 热力图添加色块:
- displot(kind=’hist’),histplot()直方图
- 分类数据对比
通常使用catplot()进行绘制
- 在分类型数据中,按官方文档分为三个类型:
- 点类型
点类型的图可以通过jitter参数(bool)调整避免重叠,jitter = False时,点重叠
点类型的图表可以通过order=[]修改x轴顺序,seaborn默认x轴顺序即dataframe中的出现顺序- stripplot()
- swarmplot()
- swarmplot()自动将点分开,但当数据量足够大时计算开销会非常大
- 分布类型
其中,violinplot()与boxenplot()可以视为箱型图的加强版,小提琴图与箱型图的区别可以理解为直方分布图与核密度图的区别
- boxplot()
- violinplot()
- boxenplot()
- 预估类型
预估类型的图会在展示数据分布外,对各个类别的数据进行一个预估
- pointplot()
- barplot()
- countplot()
- 点类型
- 在分类型数据中,按官方文档分为三个类型:
- 回归模型
seaborn主要由regplot()和lmplot()进行回归分析,其中lmplot会依赖数据x和y自动绘制出散点,线性回归模型以及95%的置信区间
- 存在高阶关系的情况下,我们可以通过参数order来进行多项式的最高次幂
- 如果数据集中存在离群点,可以通过参数robust=True来选用稳健回归模型进行绘制,默认是使用的最小二乘回归会对异常值比较敏感
- 数值相关型
- Seaborn几乎所有的绘制函数都有以下的几个参数