介绍
Matplotlib是Python库中最经常用来绘制图的,它可以快速的可视化你的数据,并且导出不同的格式。用Matplotlib绘制的图可以达到出版书籍和论文的质量要求。我们开始探索在处理一些常见的数据时应用Matplotlib。
pyplot
Matplotlib绘制图主要要用到它的pyplot模块,pyplot的用法和参数都很像Matlab,所以用过Matlab制图的对这个模块应该很快就会得心应手。我们只需把这个模块导入就可以使用了,我们一般设置别名为plt。
from matplotlib import pyplot as plt
简单的绘图
比如我们画一个cos函数和sin函数:
首先获取cos和sin的数值,使用numpy来采样一个周期的值(-π 到 π,取256个值):
import numpy as np
X = np.linspace(-np.pi, np.pi, 256, endpoint=True)
C, S = np.cos(X), np.sin(X)
然后通过pyplot将两个函数图画出来(使用默认参数):
import matplotlib.pyplot as plt
plt.plot(X, C)
plt.plot(X, S)
plt.show()
当然你也可以自己设置参数:
import numpy as np
import matplotlib.pyplot as plt
# 设置图像大小为8x6, 像素密度为80
plt.figure(figsize=(8, 6), dpi=80)
# 创建子图,1x1,在第一个位置,创建子图要在plot.plot()前面
plt.subplot(1, 1, 1)
X = np.linspace(-np.pi, np.pi, 256, endpoint=True)
C, S = np.cos(X), np.sin(X)
#用蓝色的线,宽度为1.0来绘制cos函数
plt.plot(X, C, color="blue", linewidth=1.0, linestyle="-")
#用绿色的线,宽度为1.0来绘制sin函数
plt.plot(X, S, color="green", linewidth=1.0, linestyle="-")
#设置x轴的上下限
plt.xlim(-4.0, 4.0)
#设置x轴的坐标
plt.xticks(np.linspace(-4, 4, 9, endpoint=True))
# Set y limits
plt.ylim(-1.0, 1.0)
# Set y ticks
plt.yticks(np.linspace(-1, 1, 5, endpoint=True))
#保存图片,像素密度为72
# plt.savefig("exercice_2.png", dpi=72)
#在屏幕上显示出来
plt.show()
你可以随意改变线的属性(风格,大小和颜色),X轴和Y轴的范围和坐标。具体参数可以参考http://matplotlib.org/api/
改变坐标位置:
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))
...
添加图例(添加label参数,并使用plt.legend()来选择图例的位置):
...
plt.plot(X, C, color="blue", linewidth=2.5, linestyle="-", label="cosine")
plt.plot(X, S, color="red", linewidth=2.5, linestyle="-", label="sine")
plt.legend(loc='upper left')
...
其他绘图展示
条形图:
n = 12
X = np.arange(n)
Y1 = (1 - X / float(n)) * np.random.uniform(0.5, 1.0, n)
Y2 = (1 - X / float(n)) * np.random.uniform(0.5, 1.0, n)
plt.bar(X, +Y1, facecolor='#9999ff', edgecolor='white')
plt.bar(X, -Y2, facecolor='#ff9999', edgecolor='white')
for x, y in zip(X, Y1):
plt.text(x + 0.4, y + 0.05, '%.2f' % y, ha='center', va='bottom')
plt.ylim(-1.25, +1.25)
离散图:
n = 1024
X = np.random.normal(0,1,n)
Y = np.random.normal(0,1,n)
plt.scatter(X,Y)
以上都是比较常见常用的绘图。当然Matplotlib的功能可不止这么多,它甚至连3d图像都能绘制:
已经初步认识了Matplotlib,如果想深入了解的话,参考官方手册:http://matplotlib.org/users/index.html
下一期会带你认识Scipy。
Ref:http://www.scipy-lectures.org/intro/matplotlib/index.html#line-properties