Matplotlib 是 Python 中最常用的绘图库,使用简单的几行代码,就可以绘制出曲线图、直方图、散点图、饼图等各种图形。如果对图形本身默认的设置不满意,可以通过更改标签、刻度、图例、字体等方式,让图形看起来更加个性和美观。
先来看一个简单的例子,绘制
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2, 20)
y = x ** 2
plt.plot(x, y)
plt.show()
import matplotlib.pyplot as plt 是使用 matplotlib 时约定俗成的写法,plt.plot ( ) 函数传入绘制曲线图时 x 和 y 轴的值,plt.show ( ) 用来显示当前图像(如果不写则图像无法显示)。
接下来,我们对上面的图像进行一些修改,比如说更改一下线条的颜色,显示出点的大小,给图像添加标题、标签、图例,如图 2.2 所示。
import numpy as np
x = np.linspace(0, 2, 20)
y = x ** 2
plt.plot(x, y, 'bo-')
plt.title('Simple Plot')
plt.xlabel('x label')
plt.ylabel('y label')
plt.xlim(0, 2.5)
plt.ylim(0, 5)
plt.legend(['quadratic'], loc = 'upper center')
plt.show()
plt.title ( ) 设置图形的标题,可以通过loc参数更改标题显示的位置,有 center、left、right 三个值可选,默认居中,即 loc = 'center'。
plt.xlable ( ) 和 plt.ylabel ( ) 设置 x、y 轴的标签。
plt.xlim ( ) 和 plt.ylim ( ) 设置 x、y 轴绘图区间的最小值和最大值。
plt.legend ( ) 设置图形的图例,loc 参数更改图例显示的位置,默认值为 best。
plt.plot ( ) 绘制图形,同时可以设置曲线中点的颜色、形状和线条样式, 分别使用color、marker、linestyle 这三个参数。但更常用字符连写的方式同时设置这三个参数的值,通用的格式为:'[color][marker][linestyle]',即分别使用特定字符的简写把参数的值放在一起,比如 'r^--' 这种写法,其中常用字符的对应关系如下表所示。
如图 2.2 所示,plt.plot(x,y, 'bo-') 表示点的颜色为蓝色,形状为圆圈,线条样式为实线。
也可以在一个图形中同时画多条曲线图,多次调用 plot ( ) 函数即可,如图 2.3 所示,绘制了
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2, 100)
plt.plot(x, x)
plt.plot(x, x ** 2)
plt.plot(x, x ** 3)
plt.xlabel('x label')
plt.ylabel('y label')
plt.title("Simple Plot")
plt.legend(['linear', 'quadratic', 'cubic'])
plt.show()
有时候,需要在一个图形中同时画多个不同类型的子图,方便比较不同变量之间的关系,这就需要借助 subplot ( ) 函数,如图 2.4 所示。
import matplotlib.pyplot as plt
import numpy as np
plt.subplot(2, 2, 1)
x = [ 'A', 'B', 'C', 'D', 'E', 'F']
y = [222, 42, 455, 664, 454, 334]
plt.barh(x, y, height=0.6, color='b')
plt.subplot(2, 2, 2)
x = np.random.rand(20)
y = np.random.rand(20)
colors = np.random.rand(20)
area = (30 * np.random.rand(20)) ** 2
plt.scatter(x, y, s=area, c=colors, alpha=0.5)
plt.subplot(2, 2, 3)
data = np.random.randn(100000)
plt.hist(data, bins=25, normed=1, facecolor='g', alpha=0.75)
plt.subplot(2, 2, 4)
labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
data = [ 15, 30, 45, 10 ]
plt.pie(data, labels=labels, autopct='%1.2f%%')
plt.axis('equal')
plt.show()
plt.subplot ( nrows, ncols, index ) 函数用来在一个图形中绘制多个子图,需要传入3个参数,第一个 nrows 表示行数,第二个 ncols 表示列数,第三个 index 是从 1 到 nrows * ncols 的值,表示在子图中的第几个位置。整个绘图区域被分为 nrows 行和 ncols 列,其中子图排列的顺序是从第 1 行开始,从左到右依次排开,到达行尾后换到下一行,行尾取决于列数。
比如 plt.subplot (2, 2, 1) 表示该图有 2 行 2 列共 4 个子图,index 是从 1 到 4 的值,所有的子图从第 1 行开始按照从左往右的顺序依次排开。
lt.barh ( ) 绘制横向的柱状图, height = 0.6 用来设置横向柱状图中每一个柱子的高度为 0.6,其默认值为 0.8,改为 0.6 后柱状图会比默认值更细一些。
plt.scatter ( ) 绘制散点图,s 和 c 参数分别用来设置点的大小和颜色。
plt.hist ( ) 绘制直方图,bins=25表示直方图的组数为 25。
plt.pie ( ) 绘制饼图,autopct = '%1.2f%%' 表示以保留 2 位小数的百分比形式显示各个部分的占比,plt.axis('equal') 设置 x 和 y 轴具有相同的刻度,从而保证饼图是圆的。