数据可视化是数据分析很重要的一部分,它能帮助我们更好的从繁杂的数据中更直观更有效的获取信息。
matplotlib是用来创建图表的工具包之一。其目的是为Python构建一个Matlab式的绘图接口,初次接触的时候我就感觉这货跟matlab画的图表很相似。虽说其直接创建的图不是那么的高大上,但是matplotlib确是可视化必须要掌握的基础。
matplotlib API入门
引入:
#在Anaconda的out中可以直接画出图。
%matplotlib inline
#引入pyplot
import matplotlib.pyplot as plt
Figure和Subplot
matplotlib的图像都位于Figure对象中。创建一个新的Figure:fig = plt.figure()
创建完Figure后必须要add_subplot来创建一个或多个subplot才行:ax1 = fig.add_subplot(2,2,1)(2,2,1)
的意思是创建2X2的图像,且当前选择4个subplot中的第一个。如果把后面的也创建出来如下所示(这部分感觉就和matlab很像了):
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
带有三个subplot的Figure
那么开始绘图:
from numpy.random import randn
plt.plot(randn(50).cumsum(),'k--')
_ = ax1.hist(randn(100),bins=20,color = 'k',alpha = 0.3)
ax2 = scatter(np.arange(30),np.arange(30)+3*randn(30))
绘图后的Figure
创建Firure和subplot可以用更简便的方法:axes = plt.subplots(2,3)
直接创建一个2X3的图像。
然后把axes当成二维数组一样用axes[0,1]来获取subplot实例进行操作。同时,你还可以通过sharex和sharey指定subplot应该具有相同的x轴或者y轴,这时用来比较相同范围的数据时会相当的方便。axes = plt.subplots(2,3,sharex = True)
调整subplot周围的间距
如上面的图所示,一般情况下,matplot会在subplot周围留下一定的边距。当你不需要或者想要调整时可以使用下面这个subplots_adjust方法:
subplots_adjust(left = None,bottom = None,right = None,top = None, wspace = None,hspace = None )
其中wspace和hpace用来控制宽度和高度的百分比。
axes = plt.subplots(2,3)
plt.subplots_adjust( wspace =None,hspace = 0 )
虽说图看上去很丑,但是可以很明显看出,hspace代表相邻的subplot之间的高度百分比。
调整subplot周围的间距后
颜色、标记和线型
上面我们就用过k–其实这个的含义就是k黑色,–为虚线。或者更明确的写参数linestyle= ‘–’,color=’k’是同样的效果。指明颜色也可以使用RGB值(如’#CECECE’)。
有时我们需要强调每个真实数据点的值,而不只是一条线时可以使用’ko–’,加个o。
默认两个数据点之间是直线连接的,如果想要改变可以使用参数drawstyle,例如drawstyle = ‘step-post’效果不演示了,有兴趣可以试试看。
标题、刻度、标签
对于大多数的图表装饰项,其主要实现方式有二:使用过程型的pyplot接口(MATLAB用户非常熟悉)以及更为面向对象的原生matplotlib API.
pyplot接口的设计目的就是交互式使用,含有诸如xlim, xticks和xticklabels之类的方法。它们分别控制图表的范围、刻度位置、刻度标签等。其使用方式有以下两种:
1. 调用时不带参数.则返回当前的参数.例如,plt.xlim()返回当前的X轴绘图范围。
2. 调用时带参数,则设置参数流.因此.plt.xlim([0, 10])会将X轴的范围设置为0 到10.
修改刻度:set_xticks,set_xticklabels。前者负责相对位置,后者负责具体的刻度显示值。
修改标题:set_title
修改X轴名称:set_xlabel
注解以及在Subpplot上绘图
注解(text,arrow,annotate):ax.text(x,y,'hello world!',family = 'monospace', fontsize = 10)
用法多种多样,甚至可以画个箭头指向你加注解的点上哦。
绘制图形:这个是通过创建shp块对象然后把它ax.add_patch(shp)来实现。
例如绘制一个圆形再加上去:
flg = plt.figure()
ax = flg.add_subplot(1,1,1)
(0.7,0.2)为圆心,0.15为半径,颜色为蓝色,alpha为透明度
circ = plt.Circle((0.7,0.2),0.15,color = 'b',alpha = 0.3)
ax.add_patch(circ)
保存图表到文件
保存为figpath.svg文件,svg格式。plt.savefig(‘figpath.svg’)
或者不一定要写入磁盘,写入任何文件型的对象都是可行的,比如StringIO:
from io import StringIO
buffer = StringIO()
plt.savefig(buffer)
plot_data = buffer.getvalue()
Figure.savefig还有一些参数及说明如下:
Figure.savefig的选项
matplotlib配置
通过这个配置,你可以设定生成图像的默认大小,默认的xtick,legend等等。
比如设置默认大小为10X10,你可以执行:plt.rc(‘figure’,figsize = (10,10))
rc的第一个参数是希望自定义的对象.如’figure’. ‘axes’, ‘xtick’. ‘ytick’、’grid’、’legend’等.其后可以跟上一系列的关键字参数.最简单的办法是将这些选项写成一个字典:
font_options = {'family':'monospace','weight':'bold','size':'small'}
plt.rc('font', **font options)
要了解全部的自定义选项,请查阅matplotlib的配置文件matplotlibrc(位于matplotlib/mpl-data目录中)。如果对该文件进行了自定义,并将其放在你自己的.matplotlibrc目录中,则每次使用matplotlib时就会加载该文件.
总结
这章节初步的介绍了matplotlib的API,基本会用来生成一些简单的线性图然后修改一些图表上的显示,和突出效果等等。