Python–matplotlib(持续更新)

目录

目录

  • 前言
  • 准备
    • 格式调整 & 自定义设置
  • 一.pyplot基础函数
    • (一)后端资源管理
      • 1.内存或显示处理
        • 1.1 matplotlib.pyplot.show()
        • 1.2 matplotlib.pyplot.close()
        • 1.3 matplotlib.pyplot.get_fignums()
      • 2.clear,get和set
        • 2.1 matplotlib.pyplot.clf()
        • 2.2 matplotlib.pyplot.cla()
        • 2.3 matplotlib.pyplot.gcf()
        • 2.4 matplotlib.pyplot.gca()
        • 2.5 matplotlib.pyplot.scf(fig=fig)
        • 2.6 matplotlib.pyplot.sca(ax=ax1)
    • (二)matplotlib.pyplot提供的基本画图函数
      • 1.plt.title(str, fontsize, fontweight, fontstyle, verticalalignment, horizontalalignment, rotation, alpha, backgroundcolor, bbox)
      • 2.plt.xlim(xmin, xmax),plt.ylim()
      • 3.plt.xlabel(str, fontsize, fontweight, fontstyle, verticalalignment, horizontalalignment, rotation, alpha, backgroundcolor, bbox),plt.ylabel()
      • 4.plt.grid(ls, color)
      • 5.plt.axhline(y, xmin, xmax, c, ls, lw, label),plt.axhline(x, ymin, ymax, c, ls, lw, label)
      • 6.plt.axhspan(ymin, ymax ,facecolor, alpha),plt.axvspan(xmin, xmax ,facecolor, alpha)
      • 7.plt.xticks(),plt.yticks()
      • 8.plt.annotate()
      • 9.plt.bbox()
      • 10.plt.text() / axes.text()
      • 11.plt.legend()
      • 12.plt.table()
  • 二.Figure,Axes与Axis
    • 图解
    • (一)
      • 1.元素Artist
      • 2.matplotlib.pyplot.figure(num, figsize, dpi, facecolor, edgecolor, linewidth, frameon)
    • (二)向figure中添加axes
      • 1.函数matplotlib.pyplot.subplot(*args, **kwargs) / matplotlib.pyplot.subplot(nrows, ncols, index, **kwargs)
      • 2.函数matplotlib.pyplot.subplots(nrows, ncols, sharex, sharey, squeeze, subplot_kw, gridspec_kw=None, **fig_kw)
      • 3.方法matplotlib.pyplot.figure().add_subplot(nrows, ncols, index, **kwargs)
      • 4,方法matplotlib.pyplot.figure().add_axes(rect, projection, polar, sharex, sharey, **kwargs)
      • 5.函数matplotlib.pyplot.subplot2grid(shape, loc, rowspan, colspan, fig, **kwargs)
    • (三)函数figure的方法
      • 1.matplotlib.pyplot.figure().suptitle()
      • 2.matplotlib.pyplot.figure().supxlabel()
      • 3.matplotlib.pyplot.figure().supylabel()
    • (四)AxesSubplot的方法
      • 1.
  • 三.绘画类型
    • (一)基础
      • 1.折线图matplotlib.pyplot.plot(*args,**kwargs,label) / AxesSubplot.plot()
      • 2.散点图matplotlib.pyplot.scatter(x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, edgecolors, **kwargs) / AxesSubplot.scatter()
      • 3.柱状图matplotlib.pyplot.bar() / AxesSubplot.bar()
      • 4.横向柱状图matplotlib.pyplot.barh() / AxesSubplot.barh()
      • 4.茎状图(火柴图)matplotlib.pyplot.stem(x, y, linefmt, markerfmt, basefmt,bottom, label, orientation) / AxesSubplot.stem()
      • 5.阶梯图(步阶图)(分段折线图)matplotlib.pyplot.step() / AxesSubplot.step()
      • 6.填充图matplotlib.pyplot.fill_between() / AxesSubplot.fill_between()
      • 7.堆叠图matplotlib.pyplot.stackplot() / AxesSubplot.stackplot()
      • 8.极坐标图matplotlib.pyplot.polar() / AxesSubplot.polar()
    • (二)数组和字段的绘图
      • 1.显示图像matplotlib.pyplot.imshow(X,cmap,interpolation) / AxesSubplot.imshow()
      • 2.matplotlib.pyplot.pcolormesh() / AxesSubplot.pcolormesh()
      • 3.轮廓线(等高线)matplotlib.pyplot.contour(X, Y, Z, levels, cmap, **kwargs) / AxesSubplot.contour()
      • 4.填充轮廓matplotlib.pyplot.contourf(X, Y, Z, levels, cmap, **kwargs) \ AxesSubplot.contourf()
      • 5.倒钩图matplotlib.pyplot.barbs() \ AxesSubplot.barbs()
      • 6.箭图matplotlib.pyplot.quiver() \ AxesSubplot.quiver()
      • 7.流线图matplotlib.pyplot.streamplot() \ AxesSubplot.streamplot()
      • 8.绘制X与Y的相关性matplotlib.pyplot.cohere() \ AxesSubplot.cohere()
      • 9.功率谱密度图matplotlib.pyplot.psd() \ AxesSubplot.psd()
      • 10.谱图matplotlib.pyplot.specgram() \ AxesSubplot.specgram()
    • (三)统计分析绘图
      • 1.直方图matplotlib.pyplot.hist() \ AxesSubplot.hist()
      • 2.箱线图(箱型图)matplotlib.pyplot.boxplot() \ AxesSubplot.boxplot()
      • 3.误差棒图matplotlib.pyplot.errorbar() \ AxesSubplot.errorbar()
      • 4.小提琴图matplotlib.pyplot.violinplot() \ AxesSubplot.violinplot()
      • 5.尖峰栅格图matplotlib.pyplot.eventplot() \ AxesSubplot.eventplot()
      • 6.2D直方图matplotlib.pyplot.hist2d() \ AxesSubplot.hist2d()
      • 7.matplotlib.pyplot.hexbin() \ AxesSubplot.hexbin()
      • 8.饼状图matplotlib.pyplot.pie() \ AxesSubplot.pie()
    • (四)非结构化坐标
      • 1.matplotlib.pyplot.tricontour() \ AxesSubplot.tricontour()
      • 2.matplotlib.pyplot.tricontourf() \ AxesSubplot.tricontourf()
      • 3.matplotlib.pyplot.tripcolor() \ AxesSubplot.tripcolor()
      • 4.matplotlib.pyplot.triplot() \ AxesSubplot.triplot()
    • (五)3D
      • 1. AxesSubplot.plot(x, y, z)
      • 2. AxesSubplot.scatter(x, y, z)
      • 3. AxesSubplot.plot_surface(x, y, z, rstride, cstride, cmap)
      • 4.
  • 附录
    • 1.颜色表
    • 2.标记marker

前言

    Matplotlib,全称“Matlab plotting library”,是Python中的一个库,它是数字的-NumPy库的数学扩展,是Python中绘制二维和三维图表的数据可视化工具
    Matplotlib的绘画接口分为三种:pyplot,面向当前图;axes,面向对象;Pylab,沿用 matlab 风格。
    Matplotlib中的所有内容都按层次结构组织,层次结构的顶部是由matplotlib提供的matplotlb“状态机环境”——pyplot模块,仅用于图形创建等少数功能,用户显式创建并跟踪图形和轴对象。
    层次结构的下一层是面向对象界面的第一层,在此级别,使用pyplot创建图形,通过这些图形可以创建一个或多个轴对象,使用基础函数将绘图元素(线条、图像、文本等)添加到当前图形中的当前轴。

 

准备

格式调整 & 自定义设置

# 导入matplotlib库中的pyplot
import matplotlib as mpl
import matplotlib.pyplot as plt

# 解决中文乱码,可自行修改期望字体
plt.rcParams['font.sans-serif']='SimHei'
mpl.rcParams['font.family']=[Heiti SC]

# 解决负号无法显示的问题
plt.rcParams['axes.unicode_minus']=False

# 将图表以矢量图格式显示,提高清晰度
%config InlineBackend.figure_format = 'svg'

# 提高dpi,以提高图片清晰度(dpi到三百以上,效果会明显变化)
# 也可在设置figure时设置dpi
mpl.rcParams['figure.dpi']=300

# 获取figure尺寸,默认6.4 inch,4.8 inch
plt.rcParams.get('figure.figsize')
# 全局设置输出图片大小的宽m和高n
plt.rcParams['figure.figsize']=(m,n)

# 获取字体大小,默认10.0 & 设置字体大小为k
plt.rcParams.get('font.size')
plt.rcParams['font.size']=k

# 图画面板调整为白色
rc={'axes.facecolor':'white','savefig.facecolor':'white'}
mpl.rcParams.update(rc) #一次更新多个值

# 允许输出数学公式
mpl.rcParams['text.usetex']=True

# Figure自动调整格式
plt.rcParams['figure.constrained_layout.use']=True

# 隐藏坐标系,二维三维均可
plt.axis('off')

# 三维坐标轴比例伸缩
ax.get_proj = lambda: np.dot(Axes3D.get_proj(ax), np.diag([1, 1, 2, 2]))

# 去除白边
# bbox_inches = 'tight' 可去除部分白边
# pad_inches 可正可负,减小时会放大图片在画布上的占比,以达到减少白边的效果
savefig(bbox_inches = 'tight',pad_inches = -1.7)

 

一.pyplot基础函数

(一)后端资源管理

1.内存或显示处理

1.1 matplotlib.pyplot.show()

显示当前figure对象

jupyter notebook中,不使用show()函数也可以正常运行,会显示图片的格式和图片;使用show()函数会只显示图片

可以认为大部分matplotlib函数都是在“暂存”的图片上进行处理,show()函数会把“暂存”的图片显示出去,然后就没有“暂存”图片了,故大部分操作应在show函数之前完成

 

1.2 matplotlib.pyplot.close()

关闭figure window对象,如果没有指定,则指当前figure window对象

关闭所有 figure windows
plt.close('all')

 

1.3 matplotlib.pyplot.get_fignums()

查询当前的所有图像编号
 

2.clear,get和set

2.1 matplotlib.pyplot.clf()

clf –> clean current figure –> 清除当前figure对象
清除当前 figure 中的活动的axes,但其他axes保持不变
 

2.2 matplotlib.pyplot.cla()

cla –> clean current axes –> 清除当前Axes对象
清除当前figure的所有axes,但是不关闭这个window,所以能继续复用于其他的plot。

创建太多的 figure 对象会引起警告
故推荐只创建一个 figure 对象,在画下一个图之前,使用 plt.clf() 清理掉 axes,这样可以复用 figure

 

2.3 matplotlib.pyplot.gcf()

gcf –> get current figure –> 获取当前figure对象
 

2.4 matplotlib.pyplot.gca()

gca –> get current axes –> 获取当前Axes对象
 

2.5 matplotlib.pyplot.scf(fig=fig)

scf –> set current figure –> 设置当前figure对象
 

2.6 matplotlib.pyplot.sca(ax=ax1)

sca –> set current axes –> 设置当前Axes对象
 

(二)matplotlib.pyplot提供的基本画图函数

1.plt.title(str, fontsize, fontweight, fontstyle, verticalalignment, horizontalalignment, rotation, alpha, backgroundcolor, bbox)

添加图形内容的标题
 
参数:
(1)fontsize:设置字体大小

  • 可选参数:[‘xx-small’, ‘x-small’, ‘small’, ‘medium’, ‘large’,‘x-large’, ‘xx-large’]
  • 也可以是数字,缺省为12

(2)fontweight:设置字体粗细

  • 可选参数:[‘light’, ‘normal’, ‘medium’, ‘semibold’, ‘bold’, ‘heavy’, ‘black’]

semibold:半粗体;bold:粗体

(3)fontstyle:设置字体类型

  • 可选参数:[ ‘normal’, ‘italic’, ‘oblique’ ]

italic:斜体;oblique:倾斜

(4)verticalalignment:设置水平对齐方式

  • 可选参数:[‘center’, ‘top’, ‘bottom’, ‘baseline’]

(5)horizontalalignment:设置垂直对齐方式

  • 可选参数:[‘left’, ‘right’, ‘center’]

(6)rotation:旋转角度

  • 可选参数为:[‘vertical’, ‘horizontal’]
  • 也可以是数字

(7)alpha:透明度,参数值0至1之间
(8)backgroundcolor:标题背景颜色
(9)bbox:给标题增加外框,包含参数:

  • boxstyle:方框外形
  • facecolor:简写fc背景颜色
  • edgecolor:简写ec,边框线条颜色
  • edgewidth:边框线条大小
     

2.plt.xlim(xmin, xmax),plt.ylim()

设置 x,y 轴的数值显示范围
 
参数:
xmin,xmax:x轴上的最小值和最大值

 

3.plt.xlabel(str, fontsize, fontweight, fontstyle, verticalalignment, horizontalalignment, rotation, alpha, backgroundcolor, bbox),plt.ylabel()

设置x,y轴的标签文本
 
参数:
(1)fontsize:同上
(2)fontweight:同上
(3)fontstyle:同上
(4)verticalalignment:距离坐标轴的位置

  • 可选参数:[‘center’, ‘top’, ‘bottom’, ‘baseline’]

(5)horizontalalignment:同上
(6)rotation:同上
(7)alpha:同上
(8)backgroundcolor:同上
(9)bbox:同上

 

4.plt.grid(ls, color)

绘制刻度线的辅助网格线
 
参数:
(1)ls:linestyle,线型
(2)color:颜色

 

5.plt.axhline(y, xmin, xmax, c, ls, lw, label),plt.axhline(x, ymin, ymax, c, ls, lw, label)

绘制平行于x轴额度水平参考线 / 绘制垂直于x轴额度竖直参考线
 
参数:
(1)y:水平参考线的出发点,缺省为0
(2)xmin:参考线的起始位置,缺省为0
(2)xmax:参考线的终止位置,缺省为1
(2)c:color,颜色
(3)ls:linestyle,线型
(4)lw:linewidth,线宽
(5)label:标签

 

6.plt.axhspan(ymin, ymax ,facecolor, alpha),plt.axvspan(xmin, xmax ,facecolor, alpha)

绘制平行于x轴的参考区域 / 绘制垂直于x轴的参考区域
 
参数:
(1)ymin:参考区域的起始位置
(2)ymax:参考区域的终止位置
(3)facecolor:参考区域的填充颜色
(4)alpha:参考区域填充颜色的透明度,[0~1]

 

7.plt.xticks(),plt.yticks()

获取或设置当前x轴或y轴刻度位置和标签。可以理解为设置xilim和ylim一样的效果,但可以指定范围和距离
 

8.plt.annotate()

添加图形内容细节的指向型注释文本

9.plt.bbox()

给标题增加外框

10.plt.text() / axes.text()

添加图形内容细节的无指向型注释文本(水印)

11.plt.legend()

标示不同图形的文本标签图例

12.plt.table()

向子图中添加表格

 

二.Figure,Axes与Axis

图解

请添加图片描述

  1. 一个Figure(图形)对象可以有任何数量的Axes(轴域,一套坐标轴)对象,但为了有用,至少应该有一个
  2. 一个Axes对象包含两个Axis(轴)对象(如果是三维就是三个)

Figure是最大的一个Aritist,它包括整幅图像的所有元素,一个Figure中的各个部分的artists元素如下图所示:
figure中所有的元素类型的artist的属性都可以用ax.set_XXX()和ax.get_XXX()来设置和获取。

 

(一)

1.元素Artist

有的绘图元素的基类,包含所有在figure中可以被看到的都是一个个artist。当一个figure被渲染的时候,所有的artists都被画在画布canvas上。

2.matplotlib.pyplot.figure(num, figsize, dpi, facecolor, edgecolor, linewidth, frameon)

创建一个图像,实例化Figure对象,是所有绘图元素的顶层容器,相当于给图提供了一个画布
 
参数:
(1)num:图像编号或名称

  • 若为数字且存在对应id的 figure 对象,则激活对于id的figure对象
  • 若为数字且对应id的figure对象不存在,则创建它并返回它
  • 若为字符串,则将窗口标题设置为此字符串
  • 缺省,一个新的 figure 对象将被创建,同时增加 figure 的计数数值,此数值被保存在 figure 对象的一个数字属性当中,从1开始

(2)figsize:元组,指定figure的宽和高,单位为英寸,缺省为rc figure.figsize,初始(6.4,4.8)
(3)dpi:指定绘图对象的分辨率,即每英寸多少个像素,缺省值为rc figure.dpi,初始72

1英寸等于2.54cm,A4纸是 21x30cm的纸张

(4)facecolor:背景颜色,缺省为’w’
(5)edgecolor:边框颜色,缺省为’w’
(6)linewidth:边缘的线宽
(7)frameon:是否显示边框,缺省为True

figure函数的图像有“颜色”参数,后面如savefig函数也有“颜色参数”,但存储图片时只按照savefig函数的颜色参数,缺省为默认黑白

#创建一个长为10,宽为6的画布
import matplotlib.pyplot as plt
fig=plt.figure(num='pic2-1.png',figsize = (10,6),dpi=90,facecolor = 'r',edgecolor = 'y')
#没有子图的空图形

 

(二)向figure中添加axes

1.函数matplotlib.pyplot.subplot(*args, **kwargs) / matplotlib.pyplot.subplot(nrows, ncols, index, **kwargs)

此方法属于API绘图

先隐式的创建一个画布,然后再在画布上添加一个子图(如果需要多个子图,应反复调用,也可用for循环),该子图是通过均分画布得到的

子图:一个Axes对象,矩形区域,这个矩形是基于figure坐标系统定义的。

返回值:一个Axes对象,按照子图索引,按以行主顺序递增。

  1. 使用subplot() 方法创建子图将删除任何与其重叠的预先存在的子图,而不是共享边界。
  2. 当绘制的子图之间出现遮挡,subplot方法会绘制代码位置靠后的图形

 
参数:
(1)*args(位置参数):三个整数或一个三位数(自动解析成三个整数),用于分别对应 nrows,ncols,index
(1.1)nrows:在画布纵轴上分隔成几个子图,缺省为1
(1.2)ncols:在画布横轴上分隔成几个子图,缺省为1
(1.3)index:子图索引

  • 若为整数,则表示从左往右,从上到下排列的第几个图像
  • 若为元组(m,n),m,n均为整数,则表示开始位置和结束位置,形成一个包含若干子图的矩形区域,m,n在矩形的对角位置
  • 缺省为1

举例:
plt.subplot(nrows=2, ncols=3, index=5)
=plt.subplot(2, 3, 5)
=plt.subplot(235)

(2)**kwargs(可选):一些涉及子图属性的关键字参数,此方法还接受返回AXIS基类的关键字参数

这个关键字参数和坐标系axes子类的关键词差不多

(2.1)title
(2.2)xlabel,ylabel
(2.3)xlim,ylim
(2.4)frame_on
(2.5)xticks,yticks
(2.6)facecolor
(2.7)projection(关键词参数):坐标系的投影类型

  • 可能的值有:
    {None, ‘aitoff’, ‘hammer’, ‘lambert’, ‘mollweide’, ‘polar’, ‘rectilinear’, ‘3d’, str}
  • polar:绘制极线图
  • 3d:绘制3D图
  • 缺省为None,表示笛卡尔直角坐标投影
  1. str 是自定义投影的名称。
  2. 不仅可以使用系统已设计好的投影,还可以自定义一个投影变换并使用,注册并调用自定义的投影名称即可。str即自定义投影的名称。

(2.8)polar(关键词参数):布尔值,表示是否启用’polar‘的投影类型*

  • polar=True <–> projection=‘polar’
  • 缺省为False
import numpy as np
import matplotlib.pyplot as plt

# 设置数据
x = np.arange(0, 3, 0.1)
y1 = np.sin(np.pi*x)
y2 = np.cos(np.pi*x)

#创建图像
plt.figure(num='pic2-1.png',figsize = (10,6), dpi=90,facecolor = 'lightgrey', edgecolor = 'azure',linewidth=10)
# 绘制第一个子图
ax1=plt.subplot(211)  
plt.plot(x, y1)  
# 绘制第二个子图
ax2=plt.subplot(212)  
plt.plot(x, y2)

#绘制
plt.show()

请添加图片描述

似乎subplot函数与show函数生成图片,第一次运行只有格式,第二次运行才出图片;有subplot函数无show函数,第一次运行没有输出,第二次运行才出图片

 

2.函数matplotlib.pyplot.subplots(nrows, ncols, sharex, sharey, squeeze, subplot_kw, gridspec_kw=None, **fig_kw)

此方法为面向对象绘图

创建一张画布和一组子图
 
返回值:一个figure和axes对象的元组,axes对象是由若干个子图ax构成的数组
 
参数:
(1)nrows:在画布纵轴上分隔成几个子图,缺省为1
(2)ncols:在画布横轴上分隔成几个子图,缺省为1
(3)sharex / sharey:是否共x或y轴,缺省为False

  • all / True:所有子图共享轴
  • none / False:各自享有自己的轴
  • row / col:按子图行或列共享x,y轴

(4)squeeze:在返回多个子图时,axes是否要压缩为1维数组,缺省为True
(5)subplot_kw:传入add_subplot函数中的参数,缺省为None
()gridspec_kw:传入网格参数,缺省为None

(6)**fig_kw:创建figure时的其他关键字,具体解释参考上面
(6.1)num
(6.2)figsize
(6.3)dpi
(6.4)facecolor
(6.5)edgecolor
(6.6)linewidth
(6.7)frameon

figure的参数加入subplots函数中,无顺序要求,不需要括号,正常逗号即可

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 2*np.pi, 400)
y = np.sin(x**2)
    
#创建图形,并创建一个子图
#面向对象语法
fig, ax = plt.subplots()
ax.plot(x, y)
plt.show()

请添加图片描述

import numpy as np
import matplotlib.pyplot as pl
# 设置数据
x = np.arange(0, 3, 0.1)
y1 = np.sin(np.pi*x)
y2 = np.cos(np.pi*x)
y3 = np.sin(2*np.pi*x)
y4 = np.cos(2*np.pi*x)
#创建figure
plt.figure(figsize = (10,6), facecolor = 'r', edgecolor = 'y')
#划分子图
fig,axes=plt.subplots(2,2)
ax1=axes[0,0]
ax2=axes[0,1]
ax3=axes[1,0]
ax4=axes[1,1]
# 绘制4个子图
ax1.plot(x, y1)
ax2.plot(x, y2)
ax3.plot(x, y3)
ax4.plot(x, y4)
plt.show() 

两者对比:

subplot subplots
import matplotlib.pyplot as plt
fig = plt.figure() fig,axes=plt.subplots(2,3)
ax1 = plt.subplot(231) ax1=axes[0,0]
ax2 = plt.subplot(232) ax2=axes[0,1]
ax3 = plt.subplot(233) ax3=axes[0,2]
ax4 = plt.subplot(234) ax4=axes[1,0]
ax5 = plt.subplot(235) ax5=axes[1,1]
ax6 = plt.subplot(236) ax6=axes[1,2]

请添加图片描述

似乎subplots函数有无show函数,都会直接输出格式和图片

 

3.方法matplotlib.pyplot.figure().add_subplot(nrows, ncols, index, **kwargs)

此方法为面向对象绘图

参数:
(1)nrows:在画布纵轴上分隔成几个子图,同上
(2)ncols:在画布横轴上分隔成几个子图,同上
(3)index:子图索引,同上

(4)**kwargs:一些涉及子图属性的关键字参数,同上

当绘制的子图之间出现遮挡,subplot方法会绘制代码位置靠后的图形,而add_subplot则会绘制所有图形,只是出现遮挡

4,方法matplotlib.pyplot.figure().add_axes(rect, projection, polar, sharex, sharey, **kwargs)

参数:
(1)rect(位置参数):一个4元素的浮点数列表,[left, bottom, width, height]
其定义了要添加到figure中的矩形子区域的:左下角坐标(x, y)、宽度、高度

每个元素的值是实际长度与figure对应长度的分数比值,不大于1;即将figure的宽、高作为1个单位

(2)projection(可选)(关键词参数):坐标系的投影类型,同上
(3)polar(可选)(关键词参数):表示是否启用’polar‘的投影类型,同上
(4)sharex, sharey(可选)(关键词参数):是否共x或y轴,同上

5.函数matplotlib.pyplot.subplot2grid(shape, loc, rowspan, colspan, fig, **kwargs)

参数:
(1)shape:元组,网格划分的形状
(2)loc:元组,元素数和shape一致,表示子图划分的起始位置
(3)rowspan:子图占用多少行,缺省为1
(4)colspan:子图占用多少列,缺省为1
(5)fig:缺省为None
(6)**kwargs

import matplotlib.pyplot as plt
fig = plt.figure()
fig.suptitle('Figure')
axes1 = plt.subplot2grid((3,3), (0,0), colspan=3)
axes2 = plt.subplot2grid((3,3), (1,0), colspan=2)
axes3 = plt.subplot2grid((3,3), (1,2))
axes4 = plt.subplot2grid((3,3), (2,0))
axes5 = plt.subplot2grid((3,3), (2,1), colspan=2)
plt.show()

 

(三)函数figure的方法

1.matplotlib.pyplot.figure().suptitle()

2.matplotlib.pyplot.figure().supxlabel()

3.matplotlib.pyplot.figure().supylabel()

 

(四)AxesSubplot的方法

1.

AxesSubplot.set_title(),AxesSubplot.set_xlabel(),AxesSubplot.set_ylabel(),AxesSubplot.set_xlim(),AxesSubplot.set_ylim(),AxesSubplot.remove(),AxesSubplot.set_facecolor,AxesSubplot.patch.set_alpha(),AxesSubplot.text,AxesSubplot.legend(),AxesSubplot.grid(),AxesSubplot.lines.set_label()

 

三.绘画类型

(一)基础

1.折线图matplotlib.pyplot.plot(*args,**kwargs,label) / AxesSubplot.plot()

用于画图,可以绘制点和折线线
 
参数:
(1)**args:允许传入多对x,y和format_string

plot(x1, y1, ‘str1’, x2, y2, ‘str2’)

(1.1)x(可选):X轴数据,可为(元组),[列表],numpy.array,pandas.Series,缺省为range(len(y))
(1.2)y:Y轴数据,可为(元组),[列表],numpy.array,pandas.Series

x,y可以为pd.DataFrame?

(1.3)format_string(可选):控制曲线的格式字符串
(1.3.1)c:color,颜色,详见文底《颜色表》
(1.3.2)ls:linestyle,线型

‘:’:点线;‘-.’:点画线;‘–’:短划线;‘-’:实线;’‘和’ ‘:无线条

(1.3.3)lw:linewidth,线宽
(1.3.4)marker:标记

‘.’:点标记;‘,’:点标记;‘o’:实心圈标记;‘v’:倒三角标记;‘^’:上三角标记;‘>’:右三角标记;‘<’:左三角标记;‘h’:竖六边形标记;‘H’:横六边形标记;‘+’:十字标记;‘+’:十字标记;‘1’:下花三角标记;‘2’:上花三角标记;‘3’:左花三角标记;‘4’:右花三角标记;’s’:实心方形标记;‘p’:实心五角标记;‘*’:星形标记;‘d’:瘦菱形标记;‘D’:菱形标记;‘|’:竖直线标记;‘_’:水平线标记

(1.3.5)markersize:标记大小
(1.3.6)markerfacecolor:标记填充色
(1.3.7)markeredgewidth:标记边缘宽度
(1.3.8)markeredgecolor:标记边缘色

以上可以使用命名参数(color=‘r’,linestyle=‘-’,marker=‘o’),也可以以字符串形式(‘r’+‘-’+‘o’)(‘r-o’)

(1.3.9)alpha
(2)**kwargs:允许传入多个可选的关键字参数
(3)label:标签,一个plot中只能有一个label,缺省为None

import matplotlib.pyplot as plt

#一个图片里绘制一个图像
a1=[3,4,5] # [列表]
a2=[2,3,2] # x,y元素个数N应相同

plt.plot(a1,a2)
plt.show()

请添加图片描述

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

#一个图片里绘制两个图像
x=(3,4,5) # (元组)
y1=np.array([3,4,3]) # np.array
y2=pd.Series([4,5,4]) # pd.Series

plt.plot(x,y1)
plt.plot(y2)  # x可省略,默认[0,1..,N-1]递增,N是y内的元素数
plt.show() # plt.show()前可加多个plt.plot(),画在同一张图上

Alt

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

#一个图片里绘制两个图像
plt.plot(x,y1,x,y2) # 此时x不可省略
plt.show()

Alt

import numpy as np
import matplotlib.pyplot as plt

#二维数组
b1=np.array([[0,1,2], 
             [3,4,5],
             [6,7,8]])
b2=np.array([[2,3,5],
             [8,3,1],
             [4,5,9]])
#b1的第一列为[0,3,6],b2的第一列为[2,8,4],从而构成三个点一段折线,以此类推

plt.plot(b1,b2)
plt.show()

Alt

import numpy as np
import matplotlib.pyplot as plt

#格式控制字符串
b1=np.array([[0,1,2],
             [3,4,5],
             [6,7,8]])
b2=np.array([[1,3,4],
             [7,1,8],
             [9,7,6]])

plt.plot(b1,b2,"ob:") #"b"为蓝色, "o"为圆点, ":"为点线
plt.show()

Alt

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
 
#颜色与线型
color=['b','g','r','c','m','y','k','w']
linestyle=['-','--','-.',':']

##格式控制字符串
dic1=[[0,1,2],[3,4,5]]
x=pd.DataFrame(dic1)
dic2=[[2,3,2],[3,4,3],[4,5,4],[5,6,5]]
y=pd.DataFrame(dic2)

# 循环输出所有"颜色"与"线型"
for i in range(2):
    for j in range(4):
        plt.plot(x.loc[i],y.loc[j],color[i*4+j]+linestyle[j]) 
plt.show()

#如果只控制"颜色", 格式控制字符串还可以输入英文全称, 如"red"
#也可以是十六进制RGB字符串, 如"#FF0000"

Alt

import matplotlib.pyplot as plt

#关键字=参数
y=[2,3,2] 
plt.plot(y,color="blue",linewidth=20,marker="o",markersize=50,
         markerfacecolor="red",markeredgewidth=6,markeredgecolor="grey")
plt.show()

Alt
 

2.散点图matplotlib.pyplot.scatter(x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, edgecolors, **kwargs) / AxesSubplot.scatter()

参数:
(1)x,y:表示的是shape大小为(n,)的数组,也就是我们即将绘制散点图的数据点,输入数据。x轴数据和y轴数据
(2)s(可选):表示散点大小,是一个标量或者是一个shape大小为(n,)的数组,缺省为20
(3)c(可选):color,表示的是散点色彩或颜色序列。但是c不应该是一个单一的RGB数字,也不应该是一个RGBA的序列,因为不便区分。c可以是一个RGB或RGBA二维行数组。缺省为’b’,表示蓝色
(4)marker(可选):MarkerStyle,表示的是散点形状,标记的样式,缺省为’o’
(5)cmap(可选):Colormap,标量或者是一个colormap的名字,cmap仅仅当c是一个浮点数数组的时候才使用。如果没有申明就是image.cmap,缺省为None

cmap = plt.cm.Spectral
给label为1的点一种颜色,给label为0的点另一种颜色
cmap=plt.get_cmap(‘rainbow’))
设置颜色映射

(6)norm:Normalize,数据亮度在0-1之间,也是只有c是一个浮点数的数组的时候才使用,缺省为None
(7)vmin,vmax(可选):标量,当norm存在的时候忽略。用来进行亮度数据的归一化,缺省为None
(8)alpha(可选):标量,0-1之间,散点的透明度,缺省为None
(9)linewidths:标记点的长度,散点边框的宽度,缺省为None
(10)edgecolors:设置散点边框的颜色,缺省为None

 

3.柱状图matplotlib.pyplot.bar() / AxesSubplot.bar()

4.横向柱状图matplotlib.pyplot.barh() / AxesSubplot.barh()

4.茎状图(火柴图)matplotlib.pyplot.stem(x, y, linefmt, markerfmt, basefmt,bottom, label, orientation) / AxesSubplot.stem()

参数:
(1)x(可选):数组,每根火柴的x轴位置,缺省为arange(len(y))
(2)y:数组,火柴头部的y坐标
(3)linefmt(可选):字符串类型,定义垂直线条属性,包括线条颜色和线条类型,缺省为None
(4)markerfmt(可选):字符串类型,定义火柴头部标记属性,包括线条颜色和线条类型

  • 可选颜色:C0-C9,八种基础颜色
  • 可选线性:参考上面
  • 缺省为’C0o’

(5)basefmt(可选):字符串类型,定义基线属性,缺省为‘C3-’,经典模式下为‘C2-’
(6)bottom(可选):浮点型,基线所在的y轴位置,缺省为0
(7)label(可选):字符串类型,标签,缺省为None
(8)orientation(可选):如‘y’

2D图使用此参数似乎会引起警告

 

5.阶梯图(步阶图)(分段折线图)matplotlib.pyplot.step() / AxesSubplot.step()

6.填充图matplotlib.pyplot.fill_between() / AxesSubplot.fill_between()

7.堆叠图matplotlib.pyplot.stackplot() / AxesSubplot.stackplot()

8.极坐标图matplotlib.pyplot.polar() / AxesSubplot.polar()

(二)数组和字段的绘图

1.显示图像matplotlib.pyplot.imshow(X,cmap,interpolation) / AxesSubplot.imshow()

热图(heatmap)是数据分析的常用方法,通过色差、亮度来展示数据的差异、易于理解。
参数:
(1)x:图像数据

  • (M, N):带有标量数据的图像,灰度图。数据可视化使用色彩图。
  • (M,N,3):具有RGB值的图像(float或uint8)。
  • (M,N,4):具有RGBA值的图像(float或uint8),即包括透明度。
  • 前两个维度(M,N)定义了行和列图片,即图片的高和宽
  • RGB(A)值应该在浮点数[0,1]的范围内,或者整数[0,255]。超出范围的值将被剪切为这些界限。

(2)cmap:将标量数据映射到色彩图,缺省为None

cmap=‘颜色’;cmap=plt.get_cmap(‘颜色’)

(3)interpolation:缺省为None

2.matplotlib.pyplot.pcolormesh() / AxesSubplot.pcolormesh()

3.轮廓线(等高线)matplotlib.pyplot.contour(X, Y, Z, levels, cmap, **kwargs) / AxesSubplot.contour()

参数:
(1)X,Y(可选):数组,Z中值的坐标

  • 均为二维,形状与Z相同
  • 均为一维,此时len(X)==M是Z中的列数,len(Y)==N是Z中的行数
  • 缺省为整数索引,即X = range(M), Y = range(N)

(2)Z:类似数组(N,M),绘制轮廓的高度值
(3)levels(可选):int或数组,确定等高线/区域的数量和位置

  • 若为整数n,则使用n个数据间隔,在图中展现n条轮廓线
  • 若为数组[],则在指定标高绘制轮廓线,这些值必须按递增顺序排列
  • 缺省为画出若干条曲线Z=c,c为随机数字

(4)cmap:缺省为None
 

4.填充轮廓matplotlib.pyplot.contourf(X, Y, Z, levels, cmap, **kwargs) \ AxesSubplot.contourf()

基本同上

5.倒钩图matplotlib.pyplot.barbs() \ AxesSubplot.barbs()

6.箭图matplotlib.pyplot.quiver() \ AxesSubplot.quiver()

7.流线图matplotlib.pyplot.streamplot() \ AxesSubplot.streamplot()

8.绘制X与Y的相关性matplotlib.pyplot.cohere() \ AxesSubplot.cohere()

9.功率谱密度图matplotlib.pyplot.psd() \ AxesSubplot.psd()

10.谱图matplotlib.pyplot.specgram() \ AxesSubplot.specgram()

(三)统计分析绘图

1.直方图matplotlib.pyplot.hist() \ AxesSubplot.hist()

2.箱线图(箱型图)matplotlib.pyplot.boxplot() \ AxesSubplot.boxplot()

3.误差棒图matplotlib.pyplot.errorbar() \ AxesSubplot.errorbar()

4.小提琴图matplotlib.pyplot.violinplot() \ AxesSubplot.violinplot()

5.尖峰栅格图matplotlib.pyplot.eventplot() \ AxesSubplot.eventplot()

6.2D直方图matplotlib.pyplot.hist2d() \ AxesSubplot.hist2d()

7.matplotlib.pyplot.hexbin() \ AxesSubplot.hexbin()

8.饼状图matplotlib.pyplot.pie() \ AxesSubplot.pie()

(四)非结构化坐标

1.matplotlib.pyplot.tricontour() \ AxesSubplot.tricontour()

2.matplotlib.pyplot.tricontourf() \ AxesSubplot.tricontourf()

3.matplotlib.pyplot.tripcolor() \ AxesSubplot.tripcolor()

4.matplotlib.pyplot.triplot() \ AxesSubplot.triplot()

(五)3D

1. AxesSubplot.plot(x, y, z)

2. AxesSubplot.scatter(x, y, z)

3. AxesSubplot.plot_surface(x, y, z, rstride, cstride, cmap)

参数:
(1)x,y,z:
(2)rstride:row,指定行的跨度,缺省为1
(3)cstride:column,指定列的跨度,缺省为1
(4)color:表示的是散点色彩或颜色序列,同上
(5)cmap:标量或者是一个colormap的名字,cmap仅仅当c是一个浮点数数组的时候才使用,同上
(6)alpha(可选):标量,0-1之间,散点的透明度,缺省为None

4.

Triangular 3D surfaces,3D voxel / volumetric plot,3D wireframe plot

附录

1.颜色表

颜色表

2.标记marker

符号标记符号标记符号标记符号标记
.,像素o实心圈v倒三角
^正三角<左三角>右三角1下花三角
2上花三角3左花三角4右花三角8正八面体
s实心方形p实心五角P实心十字+十字
x叉形X实心叉d瘦菱形D菱形
h竖六边形H横六边形|竖直线_水平线
*五角星

以上未完待更新,仅供个人学习,侵权联系删除,如有错误或不足之处可指出,以便改进。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年5月28日
下一篇 2023年5月28日

相关推荐