導語:為什么用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="數量")