Matplotlib绘图和可视化
martin
matplotlib API 入门
绘图是数据分析工作中最重要的任务之一,是探索过程中的一部分。例如帮助我们找出异常值、必要的数据转化、得出有关模型的idea等。Python有许多可视化工具,但是这里主要讲解matplotlib(http://matplotlib.sourceforge.net)。matpllotlib API函数(如plot和close)都位于matplotlib.pyplot模块中,其通常的引入约定是:
>>>import matplotlib.pyplot as plt
Figure和Subplot
matplotlib的图像都位于Figure对象中。可以用plt.figure创建一个新的Figure:
>>>fig = plt.figure() # 创建对象
>>>plt.show() # 显示图像,无此句代码将不能显示图像
这时会弹出一个空窗口。
plt.figure有一些选项,特别是figsize,它用于确保当图片保存到磁盘时具有一定大小的纵横比。值得注意的是,不能通过空figure绘图,必须用add_subplot创建一个或者多个subplot才行:
>>>ax1 = fig.add_subplot(2,2,1)
这条代码的意思是:图像应该是2*2的(即有2行2列,定义了图像的位置),且当前选中的是第一个,(编号从一开始)。如果再把后面两个subplot也创建出来,最终得到的图像如图:
>>>ax2 = fig.add_subplot(2,2,2)
>>>ax3 = fig.add_subplot(2,2,3)
>>>plt.show()
如果这时发出一条绘图命令(如plt.plot([1.5,3.5,-2,1.6])),matplotlib就会在最后一个用过的subplot(如果没有则创建一个)上进行绘制。因此,如果我们执行下列命令,你就会得到如图所示:
>>>from numpy.random import randn
>>>plt.plot(randn(50).cumsum(),'k--') # 随机选取50个正态分布数进行虚线绘图
plt.show()
k–是一个线型选项,用于告诉matplotlib绘制黑色虚线图。上面那些由fig.add_subplot所返回的对象,直接调用他们的实例方法就可以在其他空着的格子里面画图了,如图:
>>>ax1.hist(randn(100),bins=20,color='k',alpha=0.3) # 20个直方图,alpha透明度
>>>ax2.scatter(np.arange(30),np.arange(30)+3*randn(30)) # 绘制散点图
>>>plt.show()
由于根据特定布局创建figure和subplot是一件非常常见的任务,于是便出现了一个更为方便的方法(plt.subplots),它可以创建一个新的Figure,并返回一个含有已创建的subplot对象的numpy数组:
>>>fig,axes = plt.subplots(2,3)
>>>axes
array([[<matplotlib.axes._subplots.AxesSubplot object at 0x7f2b593c0a90>,
<matplotlib.axes._subplots.AxesSubplot object at 0x7f2b59325890>,
<matplotlib.axes._subplots.AxesSubplot object at 0x7f2b592b1f50>],
[<matplotlib.axes._subplots.AxesSubplot object at 0x7f2b59242090>,
<matplotlib.axes._subplots.AxesSubplot object at 0x7f2b591a39d0>,
<matplotlib.axes._subplots.AxesSubplot object at 0x7f2b59127ad0>]], dtype=object)
>>>
这是非常实用的,因为可以轻松的对axes数组进行索引,就好像是一个二维数组一样,例如,axes[0,1].hist(randn(100),bins=20,color&