Python:matplotlib.pyplot
翻译总结自:matplotlib.pyplot — Matplotlib 3.4.3 documentation
函数 |
说明 |
acorr | x的自相关性图 |
angle_spectrum | 角度谱 |
annotate | 在指定位置处添加文本标注 |
arrow | 画一个箭头 |
autoscale | 坐标轴范围调整(自适应) |
axes | 加一个子图(跟subplot差不多) |
axhline | 在指定位置增加一个水平线 |
axhspan | 在指定位置增加一个水平矩形区域 |
axis | 返回关于坐标轴的一些信息(xmin,xmax,ymin,ymax) |
axline | 加一条无限长的直线 |
axvline | 在指定位置增加一个垂线 |
axvspan | 在指定位置增加一个垂直矩形区域 |
bar | 柱状图 |
barbs | barbs图(各种倒勾符号) |
barh | 水平柱状图 |
boxplot | 箱型图 |
broken_barh | 断续绘制水平矩形框 |
cla | 清空当前坐标轴 |
clabel | 等高线图每条线上的标签 |
clf | 清空整个图形 |
clim | 设置颜色限制 |
close | 关闭当前绘图窗口 |
cohere | 绘制x、y的相关性图 |
colorbar | 添加颜色表 |
contour、contourf | 等高线图 |
csd | 互谱密度图 |
delaxes | 从当前图像中删除一个轴 |
draw | 重新绘制当前图像 |
errorbar | 误差棒图,绘制y轴方向或者是x轴方向的误差范围 |
eventplot | 绘制一系列的平行线 |
figimage | 为画布添加图片(添加图片背景) |
figlegend | 生成图例 |
figtext | 向图中加一个文本文字 |
figure | 额外生成一个画布 |
fill | 以填充的形式绘制多边形 |
fill_between | 填充两个水平曲线间的区域 |
fill_betweenx | 填充两个垂直曲线间的区域 |
gca | 获取当前的轴 |
grid | 设置网格线 |
hexbin | 绘制二维hexagonal bin |
hist | 直方图 |
hist2d | 二维直方图 |
hlines | 在每个y处都绘制一个从xmin到xmax的水平线 |
imread | 读取一个图像文件并保存为array |
imsave | 保存一个array为图像文件 |
imshow | 展示计算机中的图片文件(把数据展示为图片) |
legend | 显示图例 |
loglog | 双对数坐标下绘图 |
magnitude-spectrum | 幅度谱 |
margins | 边界线 |
matshow | 把一个数组或者矩阵绘制成图像 |
minorticks_off | 移除坐标轴上显示的最小值 |
minorticks_on | 显示坐标轴上的最小值 |
pause | 暂停若干秒后继续运行 |
pcolor | 二维网格图,每个矩形都填充有颜色 |
pcolormesh | 同pcolor,但官方推荐用 |
phase_spectrum | 相谱图 |
pie | 饼状图 |
plot | 折线图 |
plot_date | 绘制带日期的数据 |
polar | 极坐标 |
psd | 功率谱密度图 |
quiver | 风速箭头图(风羽图) |
quiverkey | 给quiver图加Key |
rc | 通过rc配置修改图形的各种默认属性,包括窗体大小、每英寸的点数、线条宽度、颜色、样式…… |
rc_context | 返回暂时修改的rc设置的文本 |
rcdefaults | 重设rc设置为默认的设置 |
rgrids | 极坐标坐标系下网格的设置 |
savefig | 保存当前图像 |
sca | 选择某个子图 |
scatter | 散点图 |
sci | 设置当前图像 |
semilogx | 用对数坐标绘制x轴,绘图 |
semilogy | 用对数坐标绘制y轴,绘图 |
set_cmap | 设置并应用默认色表 |
setp | 设置绘图对象的各种属性 |
show | 显示所有打开的图像 |
specgram | 语谱图 |
spy | 稀疏度 |
stackplot | 堆叠/堆栈 图 |
stem | 茎叶图 |
step | 阶梯图(区别于折线图) |
streamplot | 流线图 |
subplot | 在指定位置创造一小块画布 |
subplot2grid | 在指定位置创造一小块画布,画布的边界线标记在坐标轴上 |
subplpot_toll | 创建一个与分块相关的工具窗口 |
subplots | 创造一个画布具有一系列的分布 |
subplots_adjust | 子画布布局参数调整 |
suptitle | 设置总标题 |
switch_backend | 关闭所有开着的画布,并设置Matplotlib的后端 |
table | 往图中加表 |
tricontour、tricontourf | 三角网等高线图 |
tripcolor | 假彩色三角网等高线图 |
triplot | 绘制三角网 |
twinx | 两幅图用同一个x轴绘制 |
twiny | 两幅图用同一个y轴绘制 |
violinplot | 小提琴图 |
vlines | 在每个指定的x处绘制垂线 |
xcorr | x-y的互相关性图 |
xlabel、ylabel | x、y轴的名字 |
xlim、ylim | x、y轴的范围 |
xscale、yscale | x、y轴值的基(对数、布尔……) |
xtick、ytick | x、y轴坐标刻度的相关信息 |
fig = plt.figure() # an empty figure with no Axes fig, ax = plt.subplots() # a figure with a single Axes fig, axs = plt.subplots(2, 2) # a figure with a 2x2 grid of Axes
创建画布的方式,plt.figure()、plt.subplots( m , n )
区别在于前者只是单纯创造一个画布,没有子画布;后者则是在一个画布上分区,分区后就形成了子画布。
就像上文所写:
fig, axs = plt.subplots(2, 2) # a figure with a 2x2 grid of Axes
这里的fig是总画布,axs是子画布构成的ndarray,通过axs[i][j]就可以访问到具体的画布,再通过axs[i][j].func()就能实现在这些子画布上操作的目的。(这里的func就是本章所写的那些函数,比如,axs[1][1].axhline(...)就可以在第(1,1)幅图上绘制水平线)。
1)savefig:保存当前fig和上面的图形
用法
plt.savefig( fname, dpi=None, facecolor='w', edgecolor='w', orientation='portrait', papertype=None, format=None, transparent=False, bbox_inches=None, pad_inches=0.1, frameon=None, metadata=None )
参数
参数 |
类型 |
默认值 |
说明 |
fname | str | 输出文件名 | |
dpi | float或'figure' | 'figure' | 分辨率 |
facecolor | color或'auto' | 'auto' | 主色 |
edgecolor | color或'auto' | 'auto' | 边缘色 |
orientation | 'landscape'、'portrait' | 'portrait' | |
papertype | str | None | |
format | str | None | 文件格式,如果fname指定了后缀则该项不起作用 |
transparent | bool | False | |
bbox_inches | str或Bbox | None | 给出一个区域,只保存指定区域中的图形 |
pad_inches | float | 0.1 | |
frameon |
2)axhline、axvline:绘制水平线和垂线
用法
plt.axhline(y=0,xmin=0,xmax=1,**kwargs)
plt.axvline(x=0,ymin=0,ymax=1,**kwargs)
参数
第一个参数是指绘制线的位置
第二三个参数是指绘制线的范围(需要注意的是这里的0和1并不是数值0和1,而是比例0和1,即0——底部,1——顶部)
**kwargs:与线的样式相关的一系列参数
说明
如果第一个参数是整数,那么它指代的是索引而非实际值。
比如:
plt.axvline(x=4)
就是在第5个x值(索引为4)处绘制垂线。
3)contour、contourf
contour:等高线
contourf:填充等高线(在等高线间填充不同颜色)
用法
plt.contourf( [X,Y,] Z, [levels], **kwargs )
plt.contour( [X,Y,] Z, [levels], **kwargs )
这两个方法的参数相同
参数
参数 |
类型 |
默认值 |
说明 |
X,Y | array(升序排列) |
Z值的横纵坐标。 X、Y的尺寸(两种):①和Z轴尺寸相同的2维数组(1维数组可以通过numpy.meshgrid构造成2维);②1维数组,但是len(X)和Z轴的列数相同,len(Y)和Z轴的行数相等。 如果没有给出这个参数,会默认设置X、Y为从0~M-1和0~N-1的索引值,即X=range(M)、Y=range(N) |
|
Z | 大小为(M,N)的array | 绘制等高线时的高度值 | |
levels | int或array |
决定了(等高线/区域)的数量和位置。 如果是int n,将会自动在vmin和vmax之间生成不超过n+1条'nice'等级的等高线; 如果是array,将会在特定的等级处绘制等高线。array中的值必须是递增的。 |
|
corner_mask | bool | True |
是否启用角落蒙版(只有当Z轴是masked array时才起作用)。 |
colors |
color string或 color序列(List、array...) |
各个Level的颜色(如果是contour就是等高线的颜色,如果是contourf就是区域颜色)。 如果颜色数少于Level数,会循环使用其中的颜色。 如果Color List中只有一个颜色,那么可以用Color String来代替(比如用'red'而不是['red']),这样所有Level都会用这个颜色绘制。 默认情况下(colors=None),将用参数cmap指定的色表 |
|
alpha | float | 1 | 透明度(0:透明,1:不透明) |
cmap | str或Colormap |
'viridis' |
一个 如果colors和cmap都给出了,将会报错。 |
norm | Normalize |
如果使用了色表,这个 如果没有设置这个参数,将会使用默认线性数值。 |
|
vmin,vmax | float | 如果非None,那么这两个值的其中一个或者全部会被提供给到Normalize 实例,用于覆盖参数levels指明的默认颜色值 |
|
origin | {None, 'upper', 'lower', 'image'} | None |
用于指明Z[0,0]的位置,这个参数只有在X、Y没有给出时才有用:
|
extent | (x0,x1,y0,y1) | 如果origin非None,那么extent将应用于imshow中:它给出了外部边界。 | |
locator | ticker.Locator subclass | MaxNLocator |
如果没有直接给出levels,俺么该参数将用于确定levels |
extend | {'neither', 'both', 'min', 'max'} | 'neither' |
用于确定超过了levels范围的颜色。
低于min(levels)和高于max(levels)的值将会映射到 |
xunits,yunits | registered units | 用一个matplotlib.units.ConversionInterface 实例指定x、y轴单元 |
|
antialiased | bool | True | 抗锯齿 |
nchunk | int且>=0 | 区域细分 | |
linewidths | float或array | 1.5 | 只应用于contour,线的宽度 |
linestyles | {None, 'solid', 'dashed', 'dashdot', 'dotted'} | 只应用于contour,线的样式 | |
hatches | list[str] | 只应用于contourf |
注意
X、Y必须按照升序排列,否则可能会导致绘图异常,这要求我们在用meshgrid构造网格时,传入的x、y必须是升序排列的。
如果要为等值线添加上数字数值,可以用clabel函数(见4),如果想显示出各颜色代表的数值,可以用colorbar函数(见5)
补充
如果要绘制出各个散点并分别标号,可以用下段代码:
plt.scatter(Lon,Lat) labels = [f'Station {i}' for i in range(n)] for i in range (0,n): xy=(Lon[i],Lat[i]) plt.annotate(labels[i],xy) plt.plot()
4)clabel
说明
给等值线或者等值线填充区域添加数值
用法
matplotlib.pyplot.clabel(CS, levels=None, *, fontsize=None, inline=True, inline_spacing=5,
fmt=None, colors=None, use_clabeltext=False, manual=False,
rightside_up=True, zorder=None)
参数
参数 |
类型 |
默认值 |
说明 |
cs | contour或contourf |
用于添加数字的contour或contourf,用法: contour = plt.contour(...) plt.clabel(contour,...) 或 contourf = plt.contourf(...) contourf.clabel(...)
|
|
levels | array | None |
用于添加数值的一系列等值线或区域。 如果该项没给出,那么在构建等值线时的所有level都会被标注 |
fontsize | str、float | 10.0 或rcParams["font.size"] | 字体大小 |
inline | bool | True | 把字放到等高线时,字上的等高线是否消除 |
inline_spacing | float | 5 | 字离另外的等高线的间距 |
fmt | |||
colors | color或colors或None | None | Label的颜色 |
use_clabeltext | bool | False | 是否使用ClabelText(默认是Text)实例用于构造label |
manual | bool | True | 是否允许用鼠标拖动等值线数值 |
rightside_up | bool | True | 是否旋转 |
zorder | float或None | (2 + contour.get_zorder()) |
5)colorbar
说明
给一幅plot加上颜色柱
用法
matplotlib.pyplot.colorbar(mappable=None, cax=None, ax=None,
user_gridspec=False)
参数
参数 |
类型 |
默认值 |
说明 |
mappable |
(常用的有AxesImage和ContourSet) |
往哪副图上添加colorbar。 该参数是 |
|
cax | Axes |
这三个参数的用法我还没有搞懂,应该是与需要绘制colorbar的子图有关。 一般情况下只用第一个参数即可。 |
|
ax | Axes | ||
use_gridspec | bool |
6)坐标轴相关
pyplot中与横纵坐标轴相关的函数及其功能为:
ylabel、xlabel:x、y轴的名称(显示出来)
xlim、ylim:设置坐标轴的范围,同时会调整图像以适应坐标轴的范围
xscale、yscale:设置坐标轴刻度的基准量(比如是线性坐标还是对数坐标)
xticks、yticks:设置坐标轴显示出来的具体数值
①xlabel、ylabel
说明
设置x、y轴的名称
用法
pyplot.xlabel(xlabel, fontdict=None, labelpad=None,
*, loc=None, **kwargs)
参数
参数 |
类型 |
默认值 |
说明 |
xlabel、ylabel | str | 轴标签 | |
labelpad | float | 4.0 | 标签与坐标轴的距离 |
loc |
x:{'left', 'center', 'right'} y:{'bottom', 'center', 'top'} |
'center' | 标签位置 |
**kwargs | Text 属性 |
具体可见博客:各种样式 |
②xlim、ylim
说明
设置当前显示出来的坐标轴范围
用法
pyplot.xlim(left=None, right=None, emit=True, auto=False, *, xmin=None, xmax=None) pyplot.xlim(bottom=None, top=None, emit=True,
auto=False, *, ymin=None, ymax=None)
参数
参数 |
类型 |
默认值 |
说明 |
left、right bottom、top |
float | None(意味着不做任何变化) | 设置坐标轴的四个方向范围 |
emit | bool | True | 是否提醒观测者坐标轴范围已变化 |
auto | bool或None | False | 另一个坐标轴是否自适应变化 |
xmin,xmax ymin,ymax |
float | float | 等同于
left、right bottom、top |
返回值
以(float,float)的形式返回变化后的上下限。
③xscale、yscale
说明
设置坐标轴的变化基准值(即是正常线性变化,还是对数变化,这种)
用法
pyplot.xscale(value, **kwargs)
参数
value:{"linear", "log", "symlog", "logit", ...} or ScaleBase
④xticks、yticks
说明
设置坐标轴的具体刻度,如果调用了该函数,坐标轴的数值将完全依照该函数设置的内容
用法
pyplot.xticks(ticks=None, labels=None, **kwargs)
参数
参数 |
类型 |
说明 |
ticks | array-like | 坐标轴上要显示刻度的位置 |
labels | array-like | 每个刻度处对应的坐标轴文字 |
**kwargs | Text properties |
用于控制显示刻度的文字样式 |
返回值
locs:有关xtick位置的List
labels:有关xlabel的List
补充
如果该函数没有传入任何参数,比如(xticks()),将会获得原坐标轴的locs和labels。
例子
学习自:Python使用pyplot绘图时设置坐标标签以日期为例_Charlie1492的博客-CSDN博客_python画图加坐标标签
我们有一个叫做date的List,其中存放了一系列的用String表示的日期,比如“2020-01-22”,"2020-01-23",……,一直到“2020-09-01”。
问题:如果要从“2020-01-22”开始,每隔40天显示一个刻度及刻度对应的日期,该如何做?
1、首先,我们生成这个Date:
from datetime import date,timedelta start=date(2020,1,22) end=date(2020,9,1) days=(end-start).days D=[start+timedelta(days=i) for i in range(days)] Date=list(['{:%Y-%m-%d}'.format(d) for d in D])
['2020-01-22' , ..., '2020-08-30', '2020-08-31']
2、每个Date对应的data从文件中读取,大小与Date相同,这里就不写了
3、由于我们要以40天为间隔绘制刻度和具体的日期,所以可以用上边xticks、yticks的知识来做:
#ticks是显示刻度的位置: #list(range(len(Date)))[::40]会生成一个List=[0,40,80,...] #表明只显示第40,80,120,...处的刻度 ticks=list(range(len(Date)))[::40] #labels则是在ticks这些刻度处显示的日期 labels=Date[::40] plt.plot(Date,data) #设置坐标轴刻度时,再设置一个旋转40° plt.xticks(ticks,labels,rotation=40)
④由于底部空间太小,导致部分标签被腰斩了,所以要再加一行进行空间调整:
plt.gcf().subplots_adjust(bottom=0.15)
最终结果为: