matplotlib是python的一个绘图库。使用它可以很方便的绘制出版质量级别的图形。说实话没有matlab画的图清楚。使用Matplotlib,能够轻易生成各种图像,例如:直方图、波谱图、条形图、散点图等。
案例:绘制一条正弦曲线
import numpy as np import matplotlib.pyplot as plt xs = np.linspace(-np.pi, np.pi, 1000) ys = np.sin(xs) plt.plot(xs, ys) plt.show()
绘制水平线和垂直线:
plt.vlines(vval, ymin, ymax, ...) 绘制垂直线
参数:
- vval:垂直线的 x轴坐标的起始值
- ymin:垂直线长度的最小值
- ymax:垂直线长度的最大值
plt.hlines(xval, xmin, xmax, ...) 绘制水平线
参数:
- vval:水平线的 y轴坐标的起始值
- ymin:水平线长度的最小值
- ymax:水平线长度的最大值
import matplotlib.pyplot as plt plt.vlines(0,0,10) # x轴 plt.hlines(0,0,10) # y轴 plt.show()
线条、线宽和颜色
linestyle 线形
常见的线:直线:- 虚线: - - 点线:: 点划线:-. 星号:*
常见的点:点:. 方形:s 圆:o 像素:, 三角形:^
linewidth 线宽
color 颜色
- 英文颜色单词
- 常见颜色英文单词首字母
- 16进制表示颜色:#495434
- rgb或rgba(1,1,1) 或 (1,1,1,1)
常见的颜色:蓝色:b 青色:c 红色:r 黑色:k 绿色:g 品红:r 黄色:y 白色:w
alpha 透明度,浮点数值
plt.plot(xarray, yarray, linestyle='', linewidth=1, color='', alpha=0.5)
坐标轴刻度
plt.xticks(x_val_list , x_text_list )
参数:
- x_val_list: x轴刻度值序列
- x_text_list: x轴刻度标签文本序列 [可选]
plt.yticks(y_val_list , y_text_list )
- y_val_list: y轴刻度值序列
- y_text_list: y轴刻度标签文本序列 [可选]
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi], ["-π","-π/2", 0, "π/2", "π"])
刻度文本的特殊语法--LaTax语法字符串
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi], [r"$-\pi$",r"$-\frac{\pi}{2}$", 0, r"$\frac{\pi}{2}$", r"$\pi$"])
设置坐标轴
坐标轴名:'left':左轴、'right':右轴、'bottom':下轴、'top':上轴
ax = plt.gca() 获取其中某个坐标系
axis = ax.spines['坐标轴名'] 获取某个具体的上下左右坐标轴,left、right、bottom、top
axis.set_position(("data", val)) 设置坐标轴位置
参数:
- type: 移动坐标轴的参照类型 一般为'data' (以数据的值作为移动参照值)
- val: 参照值
axis.set_color(color) 设置坐标轴的颜色
案例:设置坐标轴至中心
ax = plt.gca() ax.spines['top'].set_color('none') ax.spines['right'].set_color('none') ax.spines['left'].set_position(('data', 0)) ax.spines['bottom'].set_position(('data', 0)) plt.yticks([-1, -0.5, 0.5, 1])
图例
显示图例,需要先在plt.plot中设置曲线的label,再plt.legend设置图例
plt.plot(xarray, yarray ... label='', ...) label: <关键字参数 str> 支持LaTex排版语法字符串
plt.legend(loc='')
loc:制定图例的显示位置 (若不设置loc,则显示默认最优位置)
| 'best' | 最优的位置 |
| 'upper right' | 上右 |
| 'upper left' | 上左 |
| 'lower left' | 下左 |
| 'lower right' | 下右 |
| 'right' | 右 |
| 'center left' | 中心偏左 |
| 'center right' | 中心偏右 |
| 'lower center' | 中心偏下 |
| 'upper center' | 中心偏上 |
| 'center' | 中心 |
plt.title("****) 设置图的标题
plt.xlabel("x") 设置x轴的名称
plt.ylabel("y") 设置y轴的名称
plt.grid(linestyle="") 设置网格线,参数可以不写
mp.tick_params(labelsize=8) 设置刻度字体大小
标注点
plt.scatter(x, y, marker='', s=60, edgecolor='', facecolor='', zorder=3)
参数:
- x,y: 需要标注的点,或点的数组
- marker: 点型
- s: 大小
- edgecolor: 边缘色
- facecolor: 填充色
- zorder: 绘制图层编号 (编号越大,图层越靠上,就不会被线条盖住)
- label: 用于在图例中显示的字符串
添加注释
有时候我们需要对特定的点进行标注,我们可以使用 plt.annotate 函数来实现。
这里我们要标注的点是 (x0, y0) = (π, 0)。
annotate("备注内容", xycoords="data", xy=(x,y), textcoords='offset points', xytext=(x, y), fontsize=14, arrowprops=dict(arrowstyle='', connectionstyle=''))
参数:
- 第一个参数,就是备注的内容,支持LaTax语法
xycoords='data':参照类型 一般为'data' (以数据的值作为移动参照值)- textcoords='offset points':表示对于标注位置的描述(offset points表示参照点的偏移坐标系)
xytext=(+30, -30)xy 偏差值,即标注位置是 xy 位置向右移动 30,向下移动30;- fontsize:字体大小
-
arrowprops是对图中箭头类型和箭头弧度的设置,需要用 dict 形式传入。
-
- arrowstyle='', #定义箭头样式
- connectionstyle='' #定义连接线的样式
import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 2 * np.pi, 50) y = np.sin(x) plt.plot(x, y) x0 = np.pi y0 = 0 plt.scatter(x0, y0, s=50) # 画出标注点 # 右边的 plt.annotate('sin(np.pi)=%s' % y0, xy=(np.pi, 0), xycoords='data', xytext=(+30, -30), textcoords='offset points', fontsize=16, arrowprops=dict(arrowstyle='->', connectionstyle="arc3,rad=.2")) # 左边的 plt.text(0.5, -0.25, "sin(np.pi) = 0", fontdict={'size': 16, 'color': 'r'}) plt.show()
============ ============================================= Name Attrs ============ ============================================= '-' None '->' head_length=0.4,head_width=0.2 '-[' widthB=1.0,lengthB=0.2,angleB=None '|-|' widthA=1.0,widthB=1.0 '-|>' head_length=0.4,head_width=0.2 '<-' head_length=0.4,head_width=0.2 '<->' head_length=0.4,head_width=0.2 '<|-' head_length=0.4,head_width=0.2 '<|-|>' head_length=0.4,head_width=0.2 'fancy' head_length=0.4,head_width=0.4,tail_width=0.4 'simple' head_length=0.5,head_width=0.5,tail_width=0.2 'wedge' tail_width=0.3,shrink_factor=0.5 ============ =============================================