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)contourcontourf

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,将会自动在vminvmax之间生成不超过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

rcParams["image.cmap"]

'viridis'

一个Colormap实例或者注册过的色表名。色表中有levelcolor间的映射。

如果colorscmap都给出了,将会报错。

norm Normalize  

如果使用了色表,这个Normalize实例将把Level值缩放到用于映射颜色的规范色表范围[0,1]。

如果没有设置这个参数,将会使用默认线性数值。

vmin,vmax float   如果非None,那么这两个值的其中一个或者全部会被提供给到Normalize实例,用于覆盖参数levels指明的默认颜色值
origin {None, 'upper', 'lower', 'image'} None

用于指明Z[0,0]的位置,这个参数只有在X、Y没有给出时才有用:

  • None:Z[0,0]在X=0、Y=0处(左下角)
  • lower:Z[0,0]在X=0.5、Y=0.5处(左下角)
  • upper:Z[0,0]在X=N+0.5、Y=0.5处(左上角)
  • image:使用rcParams["image.origin"]的值,默认'upper'
extent (x0,x1,y0,y1)   如果originNone,那么extent将应用于imshow中:它给出了外部边界。
locator ticker.Locator subclass MaxNLocator 如果没有直接给出levels,俺么该参数将用于确定levels
extend {'neither', 'both', 'min', 'max'} 'neither'

用于确定超过了levels范围的颜色。

  • neither:超过levels范围的颜色将不被染色;
  • min、max、both:低于、高于、低于或高于levels范围的区域将被绘制。

低于min(levels)和高于max(levels)的值将会映射到Colormap中的低/高值。不过大多数Colormap没有专门的这种低/高值,所以会被映射到Colormap中的边缘值。我们也可以用Colormap.set_underColormap.set_over来直接设置这些值。

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

 matplotlib.cm.ScalarMappable

(常用的有AxesImage和ContourSet)

 

往哪副图上添加colorbar。

该参数是Figure.colorbar的替代品,不过Figure.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()),将会获得原坐标轴的locslabels

例子

学习自:Python使用pyplot绘图时设置坐标标签以日期为例_Charlie1492的博客-CSDN博客_python画图加坐标标签

我们有一个叫做dateList,其中存放了一系列的用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)

最终结果为:

 

posted @ 2021-03-05 20:30  ShineLe  阅读(1098)  评论(0编辑  收藏  举报