pandas绘图

导语:为什么用pandas绘图

matplotlib虽然功能强大,但是matplotlib相对而言较为底层,画图时步骤较为繁琐,比较麻烦,因为要画一张完整的图表,需要实现很多的基本组件,比如图像类型、刻度、标题、图例、注解等等。目前有很多的开源框架所实现的绘图功能是基于matplotlib的,pandas便是其中之一,对于pandas数据,直接使用pandas本身实现的绘图方法比matplotlib更加方便简单。

pandas的两类基本数据结构series和dataframe都提供了一个统一的接口plot(),即data.plot()或者data.plot.bar/box...即可。

kind:画图的种类,可以是 line(默认)、bar、barh、kde。

  • ‘bar’ or ‘barh’ for bar plots,bar表示垂直柱状图,barh表示水平柱状图
  • ‘hist’ for histogram
  • ‘box’ for boxplot
  • ‘kde’ or ‘density’ for density plots。即Kernel Density Estimate 和密度估计,常常与hist一起混合使用。
  • ‘area’ for area plots
  • ‘scatter’ for scatter plots
  • ‘hexbin’ for hexagonal bin plots
  • ‘pie’ for pie plots
  • kind:“line”、"bar"、"barh"、"kde"
  • ax:要在其上进行绘制的matplotlib.subplot对象,如果没有,则使用默认的subplot对象。 
  • figsize:图像尺寸
  • use_index:True(默认),False。表示默认情况下,会将series和dataframe的index传给matplotlib,用已绘制X轴。
  • title:标题
  • grid:网格
  • legend:图例
  • style:绘图的风格,如‘ko--’
  • logx:在X轴上使用对数标尺
  • logy: 在Y轴上使用对数标尺
  • loglog:
  • xticks=None,用做x刻度的值
  • yticks=None,用做Y轴刻度的值
  • xlim=None, X轴的界限如【0,10】
  • ylim=None,Y轴的界限
  • rot=None,  旋转刻度标签 0-360
  • fontsize=None,
  • colormap=None,
  • table=False,        
  • yerr=None, 
  • xerr=None,
  • label=None,

 注:pandas绘图时会默认索引作为x轴

导入数据

 

1 import matplotlib.pyplot as plt
2 %matplotlib inline
3 plt.rcParams['font.sans-serif'] = ['SimHei']#显示中文
4 plt.rcParams['axes.unicode_minus'] = False#显示负号
5 import pandas as pd
6 import numpy as np
7 from pandas import Series,DataFrame 
8 test=pd.read_excel("/Users/yaozhilin/Downloads/exercise.xlsx",sep="t")
9 test.head(5)#显示前五行

 

 

 

 

 

 

•离散型数据的可视化

~饼图

 

1 fig= plt.figure(figsize=(6,6))#调整图的大小
2 t=test["所属区域"].value_counts()
3 t.plot.pie(autopct='%.1f%%',explode = [0,0.1,0,0])

 

 

 

 

 

比较matplotlib:

1 plt.pie(t.values,labels=t.index,autopct='%.1f%%',explode = [0,0.1,0,0])

 

 

 

 

相比pandas默认索引为labels,values为数值。

 

~条形图

1 fig=plt.figure(figsize=(7,7))
2 tb=test.groupby(["所属区域"]).agg({"数量":np.mean})
3 tb.plot(kind="bar")
4 plt.grid(linestyle="-.", axis='y', alpha=0.4)#设置横向网格

 

 

双条形图

1 fig=plt.figure(figsize=(7,7))
2 tb=test.groupby(["所属区域"]).agg({"成本":np.mean,"金额":np.mean})
3 tb.plot(kind="barh")

 

 

堆积图

data.plot(kind="barh",stacked=True)
1 fig=plt.figure(figsize=(7,7))
2 tb=test.groupby(["所属区域"]).agg({"成本":np.mean,"金额":np.mean})
3 tb.plot(kind="barh",stacked=True)
4 plt.grid(linestyle="-.", axis='y', alpha=0.4)#设置横向网格

 

 

 

 

 

•连续性数据的可视化

~箱型图

常用于数据清洗查看异常值

1 t=test["数量"].dropna()#切记要去除na
2 t.plot(kind="box")

 

~直方图:data.hist(bin=)

计算连续变量的频率

1 test["金额"].hist(bins=20,alpha=0.3,color='g')#bins表示x分为多少份

 

~密度图:kde

1 test["金额"].hist(bins=20,alpha=0.3,color='g',density=True)
2 test["金额"].plot(kind="kde")

 

 

~折线图

常用于随时间变化的连续数据

比如探究test中数量随时间变化趋势

 

1 tl=test.groupby("订购日期").agg({"数量":np.mean})
2 tl.plot(kind="line",style="bo--")

 

 

 

~面积图 :data.plot.area


1 fig,axes=plt.subplots(1,2)
2 ta=test.groupby(["订购日期"]).agg({"成本":np.mean,"金额":np.mean})
3 ta.plot(ax=axes[0])#第一个画布
4 ta=test.groupby(["订购日期"]).agg({"成本":np.mean,"金额":np.mean})
5 ta.plot.area(ax=axes[1])

 

•关系型数据的可视化

~散点图:data.plot.scatter

1 test.plot.scatter(x="金额",y="数量")

 

posted @ 2020-08-12 17:49  瑶池里  阅读(1028)  评论(0编辑  收藏  举报