import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 1000)
y = np.sin(x)
# 创建绘图对象,figsize参数指定绘图对象的长度和高度, 单位英寸, 1英寸=80px
plt.figure(figsize=(8, 4))
# 在当前绘图对象中画图(绘制曲线名字,画线颜色, 画线宽度)
plt.plot(x, y, label="$sin$", color="red", linewidth=2)
plt.xlabel("Time(s)")
plt.ylabel("Volt")
plt.title("PyPlot First Example")
plt.ylim(-1.2, 1.2)
# 显示图示
plt.legend()
plt.show()
Out:
注意:show()函数在通常的运行情况下,将会阻塞程序的运行,直到用户关闭绘图窗口。换句话说,在关闭show()函数弹出的图像窗口前,show()函数后面的代码不会运行,直到用户关闭图像窗口,才会继续。
plt.savefig()函数应该出现在plt.show()函数之前,否则,关闭图像窗口后,图像对象也就被释放了,什么都保存不到。
多图
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-1, 1, 0.1)
y1 = np.exp(x)
y2 = np.exp(2*x)
plt.plot(x, y1, color='red', linestyle='-', marker='^', linewidth=1)
plt.plot(x, y2, color='green', linestyle=':', marker='s', linewidth=1)
plt.xlabel("x")
plt.ylabel("y")
plt.show()
子图
figure()
函数可以帮助我们同时处理生成多个图,而subplot()
函数则用来实现,在一个大图中,出现多个小的子图。需要注意的是,figure()中的参数为图片序号,一般是按序增加的,这里面还涉及一个当前图的概念,具体可以通过下面的例子来理解;subplot()中的参数一般有3个,分别为行数,列数,以及子图序号。比如,subplot(1, 2, 1)表示这是一个1行,2列布局的图(两个子图,在同一行,分居左右),其中,当前处理的子图是第一个图(也就是左图)。
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-1, 1, 0.1)
y1 = np.exp(x)
y2 = np.exp(2*x)
y3 = np.exp(1.5*x)
plt.figure(figsize=(8, 4)) # 生成第一个图,且当前处理的是第一个图
plt.subplot(1, 2, 1) # fig1是一个一行两列布局的图,现在处理的是左图
plt.plot(x, y1, color='r', linestyle='-', marker='^', linewidth=1)
plt.xlabel("x")
plt.ylabel("y1")
plt.subplot(1, 2, 2) # fig1是一个一行两列布局的图,现在处理的是右图
plt.plot(x, y1, color='g', linestyle='-', marker='s', linewidth=1)
plt.xlabel("x")
plt.ylabel("y2")
plt.show()
Out:
添加图例
函数plt.legend()
用来为图像添加图例。
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(-1, 1, 0.1)
y1 = np.exp(x)
y2 = np.exp(2 * x)
plt.plot(x, y1, color="r", linestyle="-", marker="^", linewidth=1, label="y1")
plt.plot(x, y2, color="b", linestyle="-", marker="s", linewidth=1, label="y2")
plt.legend(loc='upper left', bbox_to_anchor=(0.2, 0.95))
plt.title("Figure 1")
plt.show()
legend()
里面的参数loc表示图例的位置,参数bbox_to_anchor
是一个二元组,用来进一步细化图例的位置,其中第一个数值用于控制legend
的左右移动,值越大越向右边移动,第二个数值用于控制legend
的上下移动,值越大,越向上移动。此外,我们在画两条曲线时,分别为它们添加了标签label,标签的内容也就是最后图例中对应的内容。
中文图例乱码问题解决
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示正号
plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号