数据可视化
matplotlib绘图入门
为了使用matplotlib来绘制基本图像,需要调用matplotlib.pyplot子库中的plot()函数
import matplotlib.pyplot as plt import numpy as np x=np.linspace(0,20) plt.plot(x,.5+x) plt.plot(x,1+2*x,'--') plt.show()
对数图
所谓对数图,实际上就是使用对数坐标绘制的图形。对于对数刻度来说,其间隔表示的是变量的值在数量级上的变化,这与线性刻度有很大的不同。对数图又分为两种不同的类型,其中一种称为双对数图,它的特点是两个坐标轴都采用对数刻度,对应的matplotlib函数是matplotlib.pyplot.loglog()。半对数图的一个坐标轴采用线性标度,另一个坐标轴使用对数刻度,它对应的matplotlib API是semilogx()函数和smilogy()函数。在双对数图上,幂律表现为直线;在半对数图上,直线则代表的是指数律。
numpy中的polyfit()函数可以用多项式来拟合数据
numpy中的polyval()函数可以用来对上面得到的多项式进行评估。
散点图
散点图可以形象展示直角坐标系中两个变量之间的关系。在散点图中,每个数据点的位置实际上就是两个变量的值。变量之间的任何关系可以拿散点图来示意。上升趋势模式通常意味着正相关。泡式图是对散点图的一种扩展。在泡式图中,每个数据点都被一个气泡所包围,它由此得名;而第三个变量的值正好可以用来确定气泡的相对大小。
matplotlib API提供的scatter()函数就是用于实现散点图
图例和注解
数据图都带有下列辅助信息
1.用来描述图中各数据序列的图例。为此,可以使用matplotlib提供的legend()函数,来给每个数据序列提供相应的标签
2.对图中要点的注解。为此,可以借助matplotlib提供的annotate()函数。matplotlib生成的注解包括标签和箭头两个组成部分。这个函数提供了多个参数,用以描述标签和箭头形式以及其位置。
3.横轴和纵轴的标签。这些标签可以通过xlabel()和ylabel()函数绘制出来
4.一个说明性质的标题,通常由matplotlib的title()函数来提供
5.网格,对于轻松定位数据点非常有帮助。matplotlib提供的grid()函数可以用来决定是否启用网格
三维图
Axes3D是由matplotlib API提供的一个类,可以用来绘制三维图。通过讲解这个类的工作机制,就能够明白面向对象的matplotlib API的原理。matplotlib的figure类是存放各种图像元素的顶级容器。
1.创建一个Figure对象
fig=plt.figure()
2.利用Figure对象创建一个Axes3D对象
ax=Axes3D(fig)
3.创建坐标矩阵时,可以借助Numpy中的meshgrid()函数
X,Y=np.meshgrid(X,Y)
4.通过Axes3D类的plot_surface()方法为数据绘制图像
ax.plot_surface(X,Y,Z)
5.根据面向对象API函数的命名约定,应该以set_开头,以程序对应的函数名结尾,具体如下:
ax.set_xlabel('year') ax.set_ylabel('Log1') ax.set_zlabel('Log2') ax.set_title('66666')
pandas绘图
pandas的series类和DataFrame类中的plot()方法都封装了相关的matplotlib函数
为了创建半对数图,需要增设logy参数
df.plot(logy=True)
为了创建散点图,需要把参数kind设为scatter,同时,还要指定两个列。此外,如果将参数loglog设为True,就会生成一个双对数(log-log图)
df[df['gpu_trans_count']>0].plot(kind='scatter',x='trans_count',y='gpu_trans_count',loglog=True)
时滞图
时滞图实际上就是一幅散点图,只不过把时间序列的图像及相同序列在时间轴上后延的图像放在一起展示而已。
我们可以利用pandas子库pandas.tools.plotting中的lag_plot()函数,来绘制时滞图
lag_plot(df['trans_count'])
自相关图
自相关图描述的是时间序列数据在不同时间延迟情况下的自相关性。所谓自相关,就是一个时间序列与相同数据在不同时间延迟情况下的相互关系。利用pandas子库pandas.tools.plotting中的autocorrelation_plot()函数,就可以画出自相关图了。