赞
踩
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)
显示当前figure对象
jupyter notebook中,不使用show()函数也可以正常运行,会显示图片的格式和图片;使用show()函数会只显示图片
可以认为大部分matplotlib函数都是在“暂存”的图片上进行处理,show()函数会把“暂存”的图片显示出去,然后就没有“暂存”图片了,故大部分操作应在show函数之前完成
关闭figure window对象,如果没有指定,则指当前figure window对象
关闭所有 figure windows
plt.close('all')
查询当前的所有图像编号
clf --> clean current figure --> 清除当前figure对象
清除当前 figure 中的活动的axes,但其他axes保持不变
cla --> clean current axes --> 清除当前Axes对象
清除当前figure的所有axes,但是不关闭这个window,所以能继续复用于其他的plot。
创建太多的 figure 对象会引起警告
故推荐只创建一个 figure 对象,在画下一个图之前,使用 plt.clf() 清理掉 axes,这样可以复用 figure
gcf --> get current figure --> 获取当前figure对象
gca --> get current axes --> 获取当前Axes对象
scf --> set current figure --> 设置当前figure对象
sca --> set current axes --> 设置当前Axes对象
添加图形内容的标题
参数:
(1)fontsize:设置字体大小
(2)fontweight:设置字体粗细
semibold:半粗体;bold:粗体
(3)fontstyle:设置字体类型
italic:斜体;oblique:倾斜
(4)verticalalignment:设置水平对齐方式
(5)horizontalalignment:设置垂直对齐方式
(6)rotation:旋转角度
(7)alpha:透明度,参数值0至1之间
(8)backgroundcolor:标题背景颜色
(9)bbox:给标题增加外框,包含参数:
设置 x,y 轴的数值显示范围
参数:
xmin,xmax:x轴上的最小值和最大值
设置x,y轴的标签文本
参数:
(1)fontsize:同上
(2)fontweight:同上
(3)fontstyle:同上
(4)verticalalignment:距离坐标轴的位置
(5)horizontalalignment:同上
(6)rotation:同上
(7)alpha:同上
(8)backgroundcolor:同上
(9)bbox:同上
绘制刻度线的辅助网格线
参数:
(1)ls:linestyle,线型
(2)color:颜色
绘制平行于x轴额度水平参考线 / 绘制垂直于x轴额度竖直参考线
参数:
(1)y:水平参考线的出发点,缺省为0
(2)xmin:参考线的起始位置,缺省为0
(2)xmax:参考线的终止位置,缺省为1
(2)c:color,颜色
(3)ls:linestyle,线型
(4)lw:linewidth,线宽
(5)label:标签
绘制平行于x轴的参考区域 / 绘制垂直于x轴的参考区域
参数:
(1)ymin:参考区域的起始位置
(2)ymax:参考区域的终止位置
(3)facecolor:参考区域的填充颜色
(4)alpha:参考区域填充颜色的透明度,[0~1]
获取或设置当前x轴或y轴刻度位置和标签。可以理解为设置xilim和ylim一样的效果,但可以指定范围和距离
添加图形内容细节的指向型注释文本
给标题增加外框
添加图形内容细节的无指向型注释文本(水印)
标示不同图形的文本标签图例
向子图中添加表格
Figure是最大的一个Aritist,它包括整幅图像的所有元素,一个Figure中的各个部分的artists元素如下图所示:
figure中所有的元素类型的artist的属性都可以用ax.set_XXX()和ax.get_XXX()来设置和获取。
有的绘图元素的基类,包含所有在figure中可以被看到的都是一个个artist。当一个figure被渲染的时候,所有的artists都被画在画布canvas上。
创建一个图像,实例化Figure对象,是所有绘图元素的顶层容器,相当于给图提供了一个画布
参数:
(1)num:图像编号或名称
(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')
#没有子图的空图形
此方法属于API绘图
先隐式的创建一个画布,然后再在画布上添加一个子图(如果需要多个子图,应反复调用,也可用for循环),该子图是通过均分画布得到的
子图:一个Axes对象,矩形区域,这个矩形是基于figure坐标系统定义的。
返回值:一个Axes对象,按照子图索引,按以行主顺序递增。
- 使用subplot() 方法创建子图将删除任何与其重叠的预先存在的子图,而不是共享边界。
- 当绘制的子图之间出现遮挡,subplot方法会绘制代码位置靠后的图形
参数:
(1)*args(位置参数):三个整数或一个三位数(自动解析成三个整数),用于分别对应 nrows,ncols,index
(1.1)nrows:在画布纵轴上分隔成几个子图,缺省为1
(1.2)ncols:在画布横轴上分隔成几个子图,缺省为1
(1.3)index:子图索引
举例:
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(关键词参数):坐标系的投影类型
- str 是自定义投影的名称。
- 不仅可以使用系统已设计好的投影,还可以自定义一个投影变换并使用,注册并调用自定义的投影名称即可。str即自定义投影的名称。
(2.8)polar(关键词参数):布尔值,表示是否启用’polar‘的投影类型*
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函数,第一次运行没有输出,第二次运行才出图片
此方法为面向对象绘图
创建一张画布和一组子图
返回值:一个figure和axes对象的元组,axes对象是由若干个子图ax构成的数组
参数:
(1)nrows:在画布纵轴上分隔成几个子图,缺省为1
(2)ncols:在画布横轴上分隔成几个子图,缺省为1
(3)sharex / sharey:是否共x或y轴,缺省为False
(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函数,都会直接输出格式和图片
此方法为面向对象绘图
参数:
(1)nrows:在画布纵轴上分隔成几个子图,同上
(2)ncols:在画布横轴上分隔成几个子图,同上
(3)index:子图索引,同上
(4)**kwargs:一些涉及子图属性的关键字参数,同上
当绘制的子图之间出现遮挡,subplot方法会绘制代码位置靠后的图形,而add_subplot则会绘制所有图形,只是出现遮挡
参数:
(1)rect(位置参数):一个4元素的浮点数列表,[left, bottom, width, height]
其定义了要添加到figure中的矩形子区域的:左下角坐标(x, y)、宽度、高度
每个元素的值是实际长度与figure对应长度的分数比值,不大于1;即将figure的宽、高作为1个单位
(2)projection(可选)(关键词参数):坐标系的投影类型,同上
(3)polar(可选)(关键词参数):表示是否启用’polar‘的投影类型,同上
(4)sharex, sharey(可选)(关键词参数):是否共x或y轴,同上
参数:
(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()
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)**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(),画在同一张图上
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#一个图片里绘制两个图像
plt.plot(x,y1,x,y2) # 此时x不可省略
plt.show()
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()
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()
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"
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()
参数:
(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
参数:
(1)x(可选):数组,每根火柴的x轴位置,缺省为arange(len(y))
(2)y:数组,火柴头部的y坐标
(3)linefmt(可选):字符串类型,定义垂直线条属性,包括线条颜色和线条类型,缺省为None
(4)markerfmt(可选):字符串类型,定义火柴头部标记属性,包括线条颜色和线条类型
(5)basefmt(可选):字符串类型,定义基线属性,缺省为‘C3-’,经典模式下为‘C2-’
(6)bottom(可选):浮点型,基线所在的y轴位置,缺省为0
(7)label(可选):字符串类型,标签,缺省为None
(8)orientation(可选):如‘y’
2D图使用此参数似乎会引起警告
热图(heatmap)是数据分析的常用方法,通过色差、亮度来展示数据的差异、易于理解。
参数:
(1)x:图像数据
(2)cmap:将标量数据映射到色彩图,缺省为None
cmap=‘颜色’;cmap=plt.get_cmap(‘颜色’)
(3)interpolation:缺省为None
参数:
(1)X,Y(可选):数组,Z中值的坐标
(2)Z:类似数组(N,M),绘制轮廓的高度值
(3)levels(可选):int或数组,确定等高线/区域的数量和位置
(4)cmap:缺省为None
基本同上
参数:
(1)x,y,z:
(2)rstride:row,指定行的跨度,缺省为1
(3)cstride:column,指定列的跨度,缺省为1
(4)color:表示的是散点色彩或颜色序列,同上
(5)cmap:标量或者是一个colormap的名字,cmap仅仅当c是一个浮点数数组的时候才使用,同上
(6)alpha(可选):标量,0-1之间,散点的透明度,缺省为None
Triangular 3D surfaces,3D voxel / volumetric plot,3D wireframe plot
符号 | 标记 | 符号 | 标记 | 符号 | 标记 | 符号 | 标记 |
---|---|---|---|---|---|---|---|
. | 点 | , | 像素 | o | 实心圈 | v | 倒三角 |
^ | 正三角 | < | 左三角 | > | 右三角 | 1 | 下花三角 |
2 | 上花三角 | 3 | 左花三角 | 4 | 右花三角 | 8 | 正八面体 |
s | 实心方形 | p | 实心五角 | P | 实心十字 | + | 十字 |
x | 叉形 | X | 实心叉 | d | 瘦菱形 | D | 菱形 |
h | 竖六边形 | H | 横六边形 | | | 竖直线 | _ | 水平线 |
* | 五角星 |
以上未完待更新,仅供个人学习,侵权联系删除,如有错误或不足之处可指出,以便改进。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。