Python绘图Matplotlib手册
作图函数
- 使用
pip install matplotlib
安装绘图库。 - 作图函数
(1)使用默认参数作图
import numpy as np
import matplotlib.pyplot as plt
# 生成-π到+π的256个元素的等差数列
X = np.linspace(-np.pi, np.pi, 256, endpoint=True)
C, S = np.cos(X), np.sin(X) # 生成X的正弦余弦函数赋值给C, S
plt.plot(X, C) # 画图
plt.plot(X, S)
plt.show() # 展示图像
(2)改变颜色和线宽
import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(-np.pi, np.pi, 256, endpoint=True)
C, S = np.cos(X), np.sin(X)
plt.figure(figsize=(10, 6), dpi=80) # 设置图标宽:高=10:6,dpi=80
# 设置余弦函数颜色蓝色,线宽2.5,样式为连线
plt.plot(X, C, color="blue", linewidth=2.5, linestyle="-")
plt.plot(X, S, color="red", linewidth=2.5, linestyle="-")
plt.show()
(3)改变坐标轴刻度
import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(-np.pi, np.pi, 256, endpoint=True)
C, S = np.cos(X), np.sin(X)
plt.figure(figsize=(10, 6), dpi=80)
# X坐标轴最小值、最大值设置为原来的1.1倍
plt.xlim(X.min()*1.1, X.max()*1.1)
plt.ylim(C.min()*1.1, C.max()*1.1)
plt.plot(X, C, color="blue", linewidth=2.5, linestyle="-")
plt.plot(X, S, color="red", linewidth=2.5, linestyle="-")
plt.show()
(4)改变坐标轴刻度显示
import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(-np.pi, np.pi, 256, endpoint=True)
C, S = np.cos(X), np.sin(X)
plt.figure(figsize=(10, 6), dpi=80)
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi]) # 显示+-π,+-π/2的刻度
plt.yticks([-1, 0, +1]) # 显示+-1,0的刻度
plt.xlim(X.min()*1.1, X.max()*1.1)
plt.ylim(C.min()*1.1, C.max()*1.1)
plt.plot(X, C, color="blue", linewidth=2.5, linestyle="-")
plt.plot(X, S, color="red", linewidth=2.5, linestyle="-")
plt.show()
import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(-np.pi, np.pi, 256, endpoint=True)
C, S = np.cos(X), np.sin(X)
plt.figure(figsize=(10, 6), dpi=80)
# 显示+-π,+-π/2的刻度,将刻度映射成具体标签
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$'])
# 显示+-1,0的刻度
plt.yticks([-1, 0, +1], [r'$-1$', r'$0$', r'$+1$'])
plt.xlim(X.min()*1.1, X.max()*1.1)
plt.ylim(C.min()*1.1, C.max()*1.1)
plt.plot(X, C, color="blue", linewidth=2.5, linestyle="-")
plt.plot(X, S, color="red", linewidth=2.5, linestyle="-")
plt.show()
(5)移动坐标轴
import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(-np.pi, np.pi, 256, endpoint=True)
C, S = np.cos(X), np.sin(X)
plt.figure(figsize=(10, 6), dpi=80)
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$'])
plt.yticks([-1, 0, +1], [r'$-1$', r'$0$', r'$+1$'])
# 移动坐标轴
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))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data', 0))
plt.xlim(X.min()*1.1, X.max()*1.1)
plt.ylim(C.min()*1.1, C.max()*1.1)
plt.plot(X, C, color="blue", linewidth=2.5, linestyle="-")
plt.plot(X, S, color="red", linewidth=2.5, linestyle="-")
plt.show()
(6)增加图例
import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(-np.pi, np.pi, 256, endpoint=True)
C, S = np.cos(X), np.sin(X)
plt.figure(figsize=(10, 6), dpi=80)
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$'])
plt.yticks([-1, 0, +1], [r'$-1$', r'$0$', r'$+1$'])
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))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data', 0))
plt.xlim(X.min()*1.1, X.max()*1.1)
plt.ylim(C.min()*1.1, C.max()*1.1)
plt.plot(X, C, color="blue", linewidth=2.5, linestyle="-", label="cosine")
plt.plot(X, S, color="red", linewidth=2.5, linestyle="-", label="sine")
# 增加图例,plot方法需要指定label
plt.legend(loc='upper left', frameon=False)
plt.show()
(7)标记特殊点
import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(-np.pi, np.pi, 256, endpoint=True)
C, S = np.cos(X), np.sin(X)
plt.figure(figsize=(10, 6), dpi=80)
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$'])
plt.yticks([-1, 0, +1], [r'$-1$', r'$0$', r'$+1$'])
# 设置标记点
t = 2*np.pi/3
# plot横纵坐标参数都是列表,可以画出面积图,也可以画线
plt.plot([t, t], [0, np.cos(t)], color='blue', linewidth=1.5, linestyle='--')
# 标记出点
plt.scatter([t,], [np.cos(t),], 50, color='blue')
# 添加标注,第一个是标注的内容,第二个是标注的点,第三个是坐标,第四个是注释的位移,
# 第五个是注释坐标,第六个是箭头样式的设置,第七个是连接的样式
plt.annotate(r'$\sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$',
xy=(t, np.sin(t)), xycoords='data',
xytext=(-100, -40), textcoords='offset points',fontsize=16,
arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=.2'))
plt.plot([t, t], [0, np.sin(t)], color='red', linewidth=1.5, linestyle='--')
plt.scatter([t,], [np.sin(t),], 50, color='red')
plt.annotate(r'$\cos(\frac{2\pi}{3})=-\frac{\sqrt{3}}{2}$',
xy=(t, np.cos(t)), xycoords='data',
xytext=(-90, -50), textcoords='offset points',fontsize=16,
arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=.2'))
plt.plot(X, C, color="blue", linewidth=2.5, linestyle="-", label="cosine")
plt.plot(X, S, color="red", linewidth=2.5, linestyle="-", label="sine")
# 增加图例,plot方法需要指定label
plt.legend(loc='upper left', frameon=False)
plt.show()
- 参数详细设置
(1)窗口设置
参数 | 默认值 | 描述 |
---|---|---|
num | 1 | 作图窗口的个数 |
figsize | figure.figsize | 宽高,单位英寸 |
dpi | figure.dpi | 分辨率 |
facecolor | figure.facecolor | 背景颜色 |
edgecolor | figure.edgecolor | 框线颜色 |
frameon | TRUE | 是否显示框线 |
(2)子图绘制
import numpy as np
import matplotlib.pyplot as plt
plt.subplot(1, 2, 1)
plt.subplot(1, 2, 2)
(3)比例绘图
import numpy as np
import matplotlib.pyplot as plt
plt.axes([0.1, 0.1, .8, .8])
plt.axes([0.2, 0.2, .3, .3])