【原】数据可视化之Matplotlib : pandas中的绘图函数

Pandas有许多能够利用DataFrame对象数据组织特点来创建标准图表的高级绘图方法,本文主要介绍的是pandas中的绘图函数。

#coding:utf-8
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from pandas import DataFrame,Series

1. 线形图

df.plot( kind='line')

  • Series 的plot 方法会以index作为X轴,画一条线
  • DataFrame 的plot 方法会以index作为X轴,给每一列绘制一条线,columns作为图例。
#第一种创建画布和画布分区方法,分开创建figure和subplot对象
fig=plt.figure()
#Series 的线形图
ax1=fig.add_subplot(2,1,1)
s=Series(np.random.rand(10).cumsum(),index=np.arange(0,100,10))  
s.plot( kind='line')
plt.xlabel(u"index") 
plt.title(u"Serise的线形图")
plt.show()
#DataFrame的线形图
ax2=fig.add_subplot(2,1,2)
df=DataFrame(np.random.rand(10,4).cumsum(0),index=np.arange(0,100,10),columns=pd.Index(['A','B','C','D'],name='Genus'))
df.plot( kind='line')
plt.xlabel(u"index") 
plt.title(u"DataFrame的线形图")
plt.show()

其中,Series.plot方法的参数

  • kind :图的类型,‘line’,'bar','barh','kde'
  • label :图例标签
  • ax :需要绘制的对象
  • rot :旋转角度
  • xticks :X轴刻度值
  • xlim :X轴刻度范围
  • grid :显示网格

2. 柱状图

df.plot( kind='bar') : 垂直柱状图

df.plot( kind='barh') : 水平柱状图

df.plot( kind='bar',stacked=True) : stacked属性为True可以设置为堆积柱状图

Series的柱状图

#第二种创建画布和画布分区方法,创建figure,返回一个subplot对象
fig,axes =plt.subplots(2,1)             
s=Series(np.random.rand(16),index=list('abcdefghijklmnop'))  
s.plot( kind= 'bar' ,ax=axes[0])       #返回的axes的数组可指定在哪个subplot对象上画图
s.plot( kind= 'barh' ,ax=axes[1])      
plt.show()

DataFrame的柱状图

  • 每一行的值为一组,每一列的columns为图例
fig,axes =plt.subplots(2,1)                    
df=DataFrame(np.random.rand(4,4),index=['one','two','three','four'],columns=pd.Index(['A','B','C','D'],name='Genus'))  
df.plot( kind= 'bar',ax=axes[0] )             
df.plot( kind= 'bar',ax=axes[1],stacked=True )  #stacked=True 可以生成堆积柱状图
plt.show()

3.密度图( KDE, Kernel Density Estimate ,核密度估计 )

  • 密度图即为连续概率分布图,将分布近似为标准混合正态分布。

df.plot( kind='kde')

fig=plt.figure()
#Series 的密度图
fig.add_subplot(2,1,1)
s=Series(np.random.rand(50).cumsum(),index=np.arange(0,100,2))  
s.plot(kind='kde')
plt.title(u"Series的密度图")
plt.show()

#DataFrame 的密度图,会给每一列都画一条密度估计线,并将columns自动生成图例
fig.add_subplot(2,1,2)
df=DataFrame(np.random.rand(10,4).cumsum(0),index=np.arange(0,100,10),columns=pd.Index(['A','B','C','D'],name='Genus'))
df.plot(kind='kde')
plt.title(u"DataFrame的密度图")
plt.show()

4.直方图

  • 直方图是对值频率进行离散化显示的柱状图,数据点呗拆分到离散的、间隔均匀的面元中。

df.hist( bins=10) :bins属性可设置柱子数量

fig=plt.figure()
#Series 的密度图
fig.add_subplot(2,1,1)
s=Series(np.random.rand(20).cumsum(),index=np.arange(0,100,5))  
s.hist( bins=10)
plt.title(u"Series的直方图")
plt.show()

#DataFrame 的密度图,会给每一列都画一张直方图,并将列名作为对应标题
fig.add_subplot(2,1,2)
df=DataFrame(np.random.rand(10,4).cumsum(0),index=np.arange(0,100,10),columns=pd.Index(['A','B','C','D'],name='Genus'))
df.hist( bins=10)
plt.show()

5.散点图

  • 散点图是观察两个一维数据间关系的有效方式

plt.scatter(X,Y)

macro = pd.read_csv('macrodata.csv')
data = macro[['cpi','m1','tbilrate','unemp']]
trans_data = np.log(data).diff().dropna()
# 画出两个Series之间的散点图
plt.scatter(trans_data['m1'],trans_data['unemp'])
plt.title('Change in log %s vs.log %s' % ('m1','unemp'))
plt.show()

DataFrame的散点图矩阵

  • 创建散布图矩阵,会把DataFrame中任意两列画散点图,观察其之间的关系。

  • 支持在对角线上放置各变量的直方图或者密度图

pd.scatter_matrix( trans_data ,diagonal = 'kde' ,color ='k' ,alpha=0.3)

# 画出散布图矩阵
pd.plotting.scatter_matrix( trans_data ,diagonal = 'kde' ,color ='k' ,alpha=0.3)
plt.show()

猜你喜欢

转载自www.cnblogs.com/laiyaling/p/10063530.html