欢迎关注公众号【Python开发实战】,免费领取Python学习电子书!
工具-matplotlib
使用matplotlib可以绘制出漂亮的图形。
绘制第一张图
导入matplotlib
import matplotlib
import matplotlib.pyplot as plt
matplotlib可以使用各种后端图形库输出图形,如Tk、wxPython等。使用命令行运行Python时,图形通常显示在单独的窗口中。在jupyter notebook中,可以通过运行%matplotlib inline
命令简单地在jupyter notebook中输出图形。
%matplotlib inline
# matplotlib.use('TKAgg') # 使用Tk作为图形后端
现在绘制第一张图!
plt.plot([1, 2, 4, 9, 5, 3])
plt.show()
如果plot函数传入了一个数组,则使用该数组作为纵轴上的坐标,使用数组中每个数据点的索引作为横轴上的坐标。
还可以提供两个数组,一个用于横轴x,一个用于纵轴y。
plt.plot([-3, -2, 5, 0], [1, 6, 4, 3])
plt.show()
轴会自动匹配数据的范围,如果想要给图形多一点空间,需要调用axis()函数来改变每个轴的范围[xmin, xmax, ymin, ymax]。
plt.plot([-3, -2, 5, 0], [1, 6, 4, 3])
plt.axis([-4, 6, 0, 7])
plt.show()
现在来绘制一个数学函数的图形。使用numpy的linspace()函数来创建一个包含500个从-2到2的浮点数组x,然后通过计算x的平方来创建第二个数组y。
import numpy as np
x = np.linspace(-2, 2, 500)
y = np.power(x, 2)
plt.plot(x, y)
plt.show()
现在给图形添加一个标题、x轴的标签、y轴的标签,并在图中绘制网格线。
plt.plot(x, y)
plt.title('Square function') # 添加标题
plt.xlabel('x') # 添加x轴标签
plt.ylabel('y = x **2') # 添加y轴标签
plt.grid(True) # 绘制网格线
plt.show()
线条风格和颜色
默认情况下,matplotlib在连续点之间绘制一条线。
plt.plot([0, 100, 100, 0, 0, 100, 50, 0, 100], [0, 0, 100, 100, 0, 100, 130, 100, 0])
plt.axis([-10, 110, -10, 140])
plt.show()
可以给plot()函数传递第三个参数来更改线条的风格和颜色。例如,g–表示绿色的虚线。
plt.plot([0, 100, 100, 0, 0, 100, 50, 0, 100], [0, 0, 100, 100, 0, 100, 130, 100, 0], 'g--')
plt.axis([-10, 110, -10, 140])
plt.show()
可以在一张图上绘制多条线,只需要给plot()函数传递参数x1, y1, style1, x2, y2, style2, …。
plt.plot([0, 100, 100, 0, 0], [0, 0, 100, 100, 0], 'r-', [0, 100, 50, 0, 100], [0, 100, 130, 100, 0], 'g--')
plt.axis([-10, 110, -10, 140])
plt.show()
或者在调用show()函数之前多次调用plot()函数。
plt.plot([0, 100, 100, 0, 0], [0, 0, 100, 100, 0], 'r-')
plt.plot([0, 100, 50, 0, 100], [0, 100, 130, 100, 0], 'g--')
plt.axis([-10, 110, -10, 140])
plt.show()
也可以画简单的点,而不是线。下面绘制一个带有绿色虚线、红色虚线和蓝色三角形的图形。
x = np.linspace(-1.4, 1.4, 30)
plt.plot(x, x, 'g--', x, x**2, 'r--', x, x**3, 'b^')
plt.show()
plot()函数返回的是Line2D对象的列表(每行一个)。可以在这些Line2D对象上设置额外的属性,如线条的宽度,虚线样式或者alpha级别等。
line1, line2, line3 = plt.plot(x, x, 'g--', x, x**2, 'r--', x, x**3, 'b^')
line1.set_linewidth(3.0)
line1.set_dash_capstyle('round')
line3.set_alpha(0.4)
plt.show()