matplotlib是python最著名的绘图库,它提供了一整套和MATLAB相似的命令API,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。
绘图方式特点优劣pyplot提供了一套和MATLAB类似的绘图API,将众多绘图对象所构成的复杂结构隐藏在这套API内部,推荐使用简单易用,方便快捷,交互使用方便,可以根据命令实时作图,但底层定制能力不足pylab包括了许多Numpy和pyplot模块中常用的函数,方便用户快速进行计算和绘图,十分适合在IPython交互式环境中使用完全封装,环境最接近MATLAB,方便用户快速进行计算和绘图,十分适合在IPython交互式环境中面向对象Matplotlib的精髓,更基础和底层的方式接近Matplotlib基础和底层,难度稍大,但定制能力强 import matplotlib.pyplot as plt import numpy as npplt.plot()实际上会通过plt.gca()获得当前的Axes对象ax,然后再调用ax.plot()方法实现真正的绘图。
x = range(0, 50) y = [num**2 for num in x] fig = plt.figure(figsize=(8,5)) # 创建figure实例 ax = fig.add_subplot(111) # 创建axes实例在figure实例fig中 ax.plot(x, y); # 创建二维线图实例在axes中 plt.gcf() # 获取当前的图表 plt.gca() # 获取当前子图 plt.clf() # 清空当前 figure plt.clf() # 清空plt绘制的内容 plt.close(0) # 关闭图 0 plt.close('all') # 关闭所有图 plt.gcf().set_size_inches(16,8) # 获取当前figure的引用,设置图片大小 plt.subplots(nrows = 1,ncols = 2)将图对象划分为1行2列的网格,返回坐标轴实例对象 x = linspace(0, 5, 10) y = x ** 2 fig, axes = plt.subplots(nrows=1, ncols=2) # type(axes) # numpy.ndarray # axes[0].plot(x, y, 'r') for ax in axes: ax.plot(x, y, 'r') ax.set_xlabel('x') ax.set_ylabel('y') ax.set_title('title') plt.show() plt.subplots(nrows = 2,ncols = 2,plot_number = 2)将图对象划分为2行2列的网格,并选中第二个网格作图 plt.figure(1) # 创建图表1 plt.figure(2) # 创建图表2 ax1 = plt.subplot(121) # 在图表2中创建子图1 ax2 = plt.subplot(122) # 在图表2中创建子图2 x = np.linspace(0, 3, 100) for i in range(3): plt.figure(1) # 选择图表1 plt.plot(x, np.exp(i*x/3)) plt.sca(ax1) # 选择图表2的子图1 plt.plot(x, np.sin(i*x)) plt.sca(ax2) # 选择图表2的子图2 plt.plot(x, np.cos(i*x)) plt.show()# subplot的方法 x = np.linspace(0, 2 * np.pi, 50) # 调用子绘图方法,生成多个绘图区,并指向某子绘图区并作图 plt.subplot(2, 1, 1) # 行,列,活跃区 plt.plot(x, np.sin(x), 'bo-', label='sin(x)') plt.title('sin(x) vs cos(x)')# 添加标题 plt.ylabel('sin(x)')# 添加纵坐标标签 plt.xlim(-2,10)# 设置X轴的范围 plt.legend() # 指向第二个绘图子区 plt.subplot(2, 1, 2) plt.plot(x, np.cos(x), 'g.:', label='cos(x)') plt.xlabel('x')# 添加纵横坐标标签 plt.ylabel('cos(x)') plt.ylim(-2,2)# 设置Y轴的范围 plt.legend();# 显示图例 共享坐标轴,调整subplot周围的间距 参数说明left = 0.125左边框位置right = 0.9右边框位置top = 0.9上边框位置bottom = 0.1下边框位置wspace = 0.2子绘图区之间预留空白空间的宽度,为平均轴宽的一小部分。hspace = 0.2子绘图区之间预留空白空间的高度,为平均轴宽的一小部分。 fig, axes = plt.subplots(2, 2, sharex=True, sharey=True) for i in range(2): for j in range(2): axes[i,j].plot(np.random.randn(100),color='b') plt.subplots_adjust(wspace=0, hspace=0) plt.show()
线性
线型标记直线-虚线–点线:点划线-.标记
点标记名称标记点.像素,圆o方形s’三角形(向下,上,左,右)v, ^, <, >三角星(向下,上,左,右)1, 2, 3, 4五角形p星形*六角形h六角形H加号+x号x菱形D窄菱形d竖线竖线横线_ x = np.linspace(0, 2 * np.pi, 50) plt.plot(x, np.sin(x), color='y', linestyle='-.', linewidth=5, marker='o', markersize=3 ); # 两种不同的曲线样式:'r-o' 和 'g--'。字母‘r’和‘g’代表线条的颜色,后面的符号代表线和点标记的类型。 # 例如 '-o' 代表包含实心点标记的实线,'--' 代表虚线。 plt.plot(x, np.sin(x), 'k-o', x, np.cos(x), 'g-.'); 刻度:tick plt.plot(np.random.randn(1000).cumsum()) plt.yticks([-50, -40, -30, -20, -10, 0, 10, 20]) plt.xticks([0, 250, 500, 750, 1000], ['Jan', 'Feb', 'Mar', 'Apr', 'May'], rotation=30, fontsize=15 ) plt.title('My first matplotlib plot', fontsize=20) plt.xlabel('Stages',fontsize=16) plt.show()图例:legend
x坐标轴名称(y轴类似) ax.set_xlabel(“label”)plt.xlabel(“label”) x坐标轴刻度范围(y轴类似) 返回当前x轴绘制图范围:plt.xlim()/ax.get_xlim()将x轴的范围设置为0到10:plt.xlim([0,10]) / ax.set_xlim(0,10) X轴刻度(y轴类似) xticks和xticklabels用于设置x轴刻度ax.set_xticks([0,250,500,750])plt.xticks([0,250,500,750])ax.set_xticklabels([‘one’, ’two’, ’three’, ’four’], rotation=30,fontsize=‘small’)plt.xticklabels([‘one’, ’two’, ’three’, ’four’], rotation=30,fontsize=‘small’)注解:annotate(文本,箭头等)
有时需要用文字或者箭头标注,可以通过text,arrow和annotate等函数进行添加ax.text(x, y, fontsize=fs, verticalalignment=va,horizontalalignment=ha, …)x和y指定放置文字的位置,va和ha指定对其方式,可以是top,bottom,center或者left,right,center添加箭头使用pyplot.annotate,调用方式与text类似。下面是可选择的参数:annotate(text, xy=(tx0,ty0), xytext=(tx1,ty1),arrowprops=dict(arrowstyle="->", connectionstyle=“arc3”))其中,text是与箭头一起的文字,xy是箭头所在终点位置,xytext起点位置,arrowtypes指定箭头的样式 x = np.linspace(0, 10, 1000) y = np.sin(x) plt.plot(x,y,label="$sin(x)$",color="red",linewidth=3) plt.text(2,0,'文本在(2,0)这个点', family='Simhei', fontsize=10) # 添加文本 plt.arrow(4, -0.5, 0.5, 0.5) # 4, -0.5, 4.5, 0 添加箭头 plt.annotate("我是注解", xy=(0.5, 0.5), xytext=(1, -0.25),arrowprops=dict(arrowstyle="->")) # 添加注释 plt.legend() plt.show() 保存图表:savefig plt.savefig(‘figpath.png’, dpi=400, bbox_inches=‘tight’) # bbox_inches(可以减除当前图周围的空白部分) x = np.linspace(0, 2 * np.pi, 50) plt.figure(figsize=(8,5)) plt.plot(x, np.sin(x), 'r-x', label='Sin(x)') # plt.plot(x, np.cos(x), 'g-^', label='Cos(x)') plt.plot(x, np.cos(x), 'g-o', label='Cos(x)') plt.legend(loc=0) # plt.legend(loc='center right') # plt.legend(loc='best') # 展示图例, 并放在最佳位置 plt.xlabel('Rads') # 给 x 轴添加标签 plt.ylabel('Amplitude') # 给 y 轴添加标签 plt.title('Sin and Cos Waves') # 添加图形标题 plt.ylim(-1.5, 1.5) # y轴的刻度范围 plt.grid() # 添加网格 plt.savefig("Sin and Cos Waves.png", dpi=800) # 保存图 plt.show()数据可视化之matplotlib绘图基础二 Matplotlib中文文档