利用Python进行数据分析(十三)之Pandas的绘图函数

Pandas的绘图函数

之前看的直接用matplotlib来绘图,画一张图还得配置各种标题,刻度标签等等。而pandas的DataFrame和Series都自带生成各类图表的plot方法,就可以省略去写行列标签,分组信息等。明显更简洁的多。

线形图

plot方法默认生成的就是线形图。

import numpy as np
from pandas import Series,DataFrame
%matplotlib inline 
s = Series(np.random.randn(10).cumsum(),index=np.arange(0,100,10))
s.plot()

该Series对象的索引会传给matplotlib,并用来绘制X轴。可以用use_index=False,然后用xticks和xlim,yticks和ylim调节。其他参数参考后面的plot的参数表查看。

DataFrame的plot方法会在一个subplot中为各列绘制一条线,并自动创建图例。

df = DataFrame(np.random.randn(10,4).cumsum(0),columns = ['A','B','C','D' ],index = np.arange(0,100,10))
df.plot()


Series.plot方法的参数如下:

参数 说明
label 用于图例的标签
ax 要在其上进行绘制的matplotlib subplot对象.如果没有设置,则使用当前matplotlib subplot
style 将要传给matplotlib的风格字符串(如’ko–’)
alpha 图表的填充不透明度(0到1之间)
kind 可以是’line’, ‘bar’, ‘barh’, ‘kde
logy 在y轴上使用对数标尺
use index 将对象的索引用作刻度标签
rot 旋转刻度标签(0到360)
xticks 用作x轴刻度的值
yticks 用作y轴刻度的值
xlim x轴的界限(例如[0,101)
ylim y轴的界限
grid 显示轴网格线(默认打开)

专用于DataFrame.plot方法的参数如下:

参数 说明
subplots 将各个DataFrame列绘制到单独的subplot中
sharex 如果subplots=True,则共用同一个x轴,包括刻度和界限
sharey 如果subplots=True,则共用同一个Y轴
figsize 表示图像大小的元组
title 表示图像标题的字符串
legend 添加一个subplot图例(默认为True)
sort_columns 以字母表顺序绘制各列,默认使用当前列顺序

柱状图

柱状图比较简单,在线形图生成的代码下,添加kind=’bar’(垂直柱状图)或kind=’barh’(水平柱状图)
DataFrame默认会将每行的数据分为一组。
kind参数
当使用stacked = True参数时即可生成堆积柱状图,每行的值堆积在一起。
stacked参数

s.value_counts().plot(kind='bar')可用来显示Series各值的出现概率。
后面举了个例子不贴了,但是这个注解。。。

直方图和密度图

直方图(histogram)是一种可以对值频率进行离散化显示的柱状图。数据点被拆分到离散的、间隔均匀的面元中.绘制的是各面元中数据点的数量。简而言之,就是用来表明分布情况的柱状图。一般第一步是将值的范围分段,即将整个值的范围分成一系列间隔,然后计算每个间隔中有多少值。 这些值通常被指定为连续的,不重叠的变量间隔。 间隔必须相邻,并且通常是(但不是必须的)相等的大小。Serises的hist方法可以实现。

与此相关的一种图表类型是密度图,它是通过计算“可能会产生观测数据的连续概率分布的估计”而产生的。一般的过程是将该分布近似为一组核(即诸如正态(高斯)分布之类的较为简单的分布)。因此,密度图也被称作KDE (Kernel Density Estimate,核密度估计)图.调用plot时加kind=’kde’即可生成一张密度图(标准混合正态分布)。

这两种图表常常会被画在一起。直方图以规格化形式给出(以便给出面元化密度).然后再在其上绘制核密度估计。看一个由两个不同的标准正态分布组成的双峰分布(如图所示):

comp1 = np.random.normal(0,1,size=200) #N(0,1)
comp2 = np.random.normal(10,2,size=200) #N(10,4)
values = Series(np.concatenate([comp1,comp2]))

values.hist(bins=100,alpha=0.3,color='k',normed =True) #hist画直方图
values.plot(kind='kde',style='k--')

两个不同的标准正态分布组成的双峰分布

散布图

散布图(scatter plot)是观察两个一维数据序列之间的关系的有效手段。matplotlib的scatter方法是绘制散布图的主要方法。
DataFrame用plotting的scatter_matrix创建散布图矩阵,并且支持对角线上放置各变量的直方图或密度图(diagonal=’kde’)。

import pandas as pd
pd.plotting.scatter_matrix(df,diagonal='kde',color='k',alpha=0.3)

散布图

Python图形化工具生态系统

matplotlib是Python领域使用最广泛的绘图工具。虽然matplotlib可以为
Web应用创建漂亮的图表,但这通常需要耗费大量的精力,因为它原本是为印刷而设计的。先不管美不美观,至少它足以应付大部分需求.其他的还有Chaco(非常适合用复杂的图形化方式表达数据的内部关系。对交互的支持要好得多,而且渲染速度很快),mayavi(是一个基于开源C++图形库VTK的3D图形工具包。也能集成到Ipython实现交互)

最后,关于图形化工具的原话:基于Web技术(比如JavaScript)的图形化是必然的发展趋势。毫无疑问.许多基于Flash或JavaScript的静态或交互式图形化工具已经出现了很多年。而且类似的新工具包(如d3.js及其分支项目)一直都在不断涌现。相比之下,非Web式的图形化开发工作在近几年中减慢了许多。Python以及其他数据分析和统计计算环挽(如R)都是如此。于是,开发方向就变成了实现数据分析和准备工具(如pandas)与Web浏览器之间更为紧密的集成.

微信公众号:BrainZou
欢迎关注,一起学习。

猜你喜欢

转载自blog.csdn.net/zou249014591/article/details/80025720
今日推荐