Pandas的绘图函数
之前看的直接用matplotlib来绘图,画一张图还得配置各种标题,刻度标签等等。而pandas的DataFrame和Series都自带生成各类图表的plot方法,就可以省略去写行列标签,分组信息等。明显更简洁的多。
线形图
plot方法默认生成的就是线形图。
import numpy as npfrom 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()
参数 | 说明 |
---|---|
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 | 显示轴网格线(默认打开) |
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
链接:https://www.jianshu.com/p/65c2c1ab3ebd
共同学习,写下你的评论
评论加载中...
作者其他优质文章