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="數量")

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM