开始前先导入matplotlib库
from matplotlib import pyplot as plt
画一幅图,首先新建一个figure
plt.figure(1)
如果想要在一幅图里画多个图线,用subplot
plt.subplot(221)
“221”即把整个图分为2x2的四个小块,当前图形画在第1个块中,具体1~4代表哪个位置的快可以自己试试~
画图命令plot
plt.plot(x, y, color='r')
和matlab 画图类似,plot画图也需要两组大小相同的数组数据,分别为x和y
后面的color可以设置线的颜色,当然还可以修改线型等等。
为了图像好看可以加个网格grid:
plt.grid(alpha=0.4) # alpha表示透明度
此外,很重要的就是坐标轴的设置了
首先加上坐标的标签xlabel 、ylabel:
plt.xlabel("t [s]")
plt.ylabel(r'$\psi$ [deg]')
注意这里如果有希腊字母或者上下标等等这样的特殊字符,要用两个美元符号夹起来,比如下标要写为:
'$x_e$'
要是下标多于一个字符如要用{}括起来:
'$y_{x=0}$'
要是有希腊字母比如必须用r'':
r'$\varepsilon_0$=39deg'
刻度线的设置
比如以指定的间隔设置刻度线,每隔100来一条刻度线:
需要添加类:
from matplotlib.pyplot import MultipleLocator
y_major_locator = MultipleLocator(100) # 每隔100一个刻度线
ax = plt.gca() # 获得当前轴对象
ax.yaxis.set_major_locator(y_major_locator) # 设置y轴的刻度线
设置刻度的标签
自动标签是它本来的值,但如果想要自己设置标签的话,可以用xticks来设置:
x_ticks = np.linspace(-1000e+3, 1000e+3, 5)
x_ticks_str = [str(int(i/1000)) for i in x_ticks]
plt.xticks(x_ticks, x_ticks_str) # 第一个参数是刻度值,第二个参数是自己设置的该刻度值对应的标签
上面是把原来的-1000e+3,-500e+3,0,500e+3,1000e+3设置为-1000,-500,0,500,1000。
另外如果想设置固定的刻度范围,使用xlim:
plt.xlim(x_lim) # 固定当前x刻度最值 x_lim=[x_min,x_max]
plt.ylim(y_lim) # 固定当前y刻度最值 y_lim=[y_min,y_max]
如果想在某一点(假设在第一象限)
向坐标轴画虚线,用vlines和hline画横线和竖线,同样颜色和线型可以修改:
plt.vlines(x0, y_min, y0, colors='b', linestyles='dashed') # 画垂虚线
plt.hlines(y0, x_min, x0, colors='b', linestyles='dashed') # 画横虚线
拿vlines来说,第一个参数是竖线vlines的位置,即处,第二个参数和第三个参数是虚线的最小值和最大值。
如果想给有子图的图像设置总标题,可以用suptitle:
plt.suptitle("总标题")
如果子图的坐标标签相互有重叠,用tight_layout()展开:
plt.tight_layout() # 保证子图坐标不重叠
保存图像
可以设置图像的格式,如保存成svg矢量格式插入到word里面等等,bbox_inches="tight"保证图像能完整保存。注意,如果有plt.show()命令,一定要放在savefig之后,否则保存的就是一张白纸。
plt.savefig('图像名.svg', dpi=2400, format='svg', bbox_inches="tight")
如果想在两条曲线之间加上填充颜色或者阴影,可以用fill_between:
plt.fill_between(x_shade, y1_shade, y2_shade, interpolate=False, alpha=0.2, hatch='///')
前三个参数是曲线一的x、y1数组和曲线二的x、y2数组,x是相同的。
需要注意的是hatch填充的图案只有在svg、pdf等格式下才会显示出来。
添加图例的时候,可以只给某一些图线添加:
line1, = plt.plot(xe, ye, color='r') # 注意此处的逗号
line2, = plt.plot(xa, ya, ':', color='k') # 注意此处的逗号
line3, = plt.plot(xb, yb, color='b')
plt.legend([line1, line3], ['line1曲线名', 'line2曲线名'], loc='upper right')