Python使用matplotlib绘图示例
Python中可以使用matplotlib来实现与MATLAB一样的绘图功能,十分强大,现在简单的一个演示。
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author : Peidong # @Site : # @File : plt.py # @Software: PyCharm # 绘制三角函数 import matplotlib.pyplot as plt import numpy as np # 确定自变量范围 X = np.linspace(-np.pi, np.pi, endpoint=True) # 给定两个不同的函数 C, S = np.cos(X), np.sin(X) #这里用到了Matplotlib和numpy模块,linspace在(−π,π)之间分成共256个小段, #并把这256个值赋予X。C,S分别是cosine和sine值(X,C,S都是numpy数组) # 绘图 plt.figure(1) # 设置标题 plt.title("eg1") plt.plot(X, C) plt.plot(X, S) # 显示图像 # plt.show() # 设置颜色粗细及标签 plt.figure(2) plt.title("eg2") plt.plot(X, C, 'b-', lw=2.5, label="cosine") plt.plot(X, S, 'r-', lw=2.5, label="sine") # 设置标签所在位置 plt.legend(loc='upper left') #这里`b-`是`color="blue",linestyle="-"`的简写形式 #`lw`=`linewidth`,两种写法都是合理的,但是`b-`这种形式明显更加简洁,也很好理解 # 调整坐标轴 plt.figure(3) # 设置两个子图 f = plt.subplot(211) g = plt.subplot(212) plt.title("eg3") # 选择子图 plt.sca(f) plt.plot(X, C, 'b-', lw=2.5, label="cosine") # 设置标签所在位置 plt.legend(loc='upper left') # 选择子图 plt.sca(g) plt.plot(X, S, 'r-', lw=2.5, label="sine") # 设置标签所在位置 plt.legend(loc='upper left') # 设置子图2的坐标范围 plt.xlim(X.min()*1.1, X.max()*1.1) plt.ylim(C.min()*1.1, C.max()*1.1) # 调整坐标标度值 plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi]) plt.yticks([-1, 0, 1]) # 进一步调整坐标标度值 plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi], [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$\pi/2$',r'$+\pi$']) # 调整坐标轴位置 ax=plt.gca() ax.spines['right'].set_color('none') #先把右边和上边的边界设置为不可见 ax.spines['top'].set_color('none') ax.xaxis.set_ticks_position('bottom') ax.spines['bottom'].set_position(('data', 0)) #然后把下边界和左边界移动到0点 ax.yaxis.set_ticks_position('left') ax.spines['left'].set_position(('data', 0)) # 设置特殊点注释 t = 1*np.pi/3 #画出需要标注的点 plt.plot([t, t], [0,np.sin(t)], color='red', linewidth=2.5, linestyle="--") plt.scatter([t, ], [np.sin(t), ], 50, color='red') plt.annotate(r'$\sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$', xy=(t, np.sin(t)), xycoords='data', xytext=(+10, +30), textcoords='offset points', fontsize=16, arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2")) # 修改坐标轴刻度大小 for label in ax.get_xticklabels() + ax.get_yticklabels(): label.set_fontsize(16) label.set_bbox(dict(facecolor='w',edgecolor='None',alpha=0.4)) # 显示图像 plt.show()
示例图如下所示:
演示图一:基本绘制
演示图二:打标签调整相关参数
演示图三:自定义图像形式