pandas繪圖詳細教程
歡迎關注“勇敢AI”公眾號,更多python學習、資料分析、機器學習、深度學習原創文章與大家分享,還有更多電子資源、教程、資料集下載。勇敢AI,一個專注於人工智慧AI的公眾號。
==================================================================================
一、pandas繪圖
前面講過matplotlib的相關教程,matplotlib雖然功能強大,但是matplotlib相對而言較為底層,畫圖時步驟較為繁瑣,比較麻煩,因為要畫一張完整的圖表,需要實現很多的基本元件,比如影象型別、刻度、標題、圖例、註解等等。目前有很多的開源框架所實現的繪圖功能是基於matplotlib的,pandas便是其中之一,對於pandas資料,直接使用pandas本身實現的繪圖方法比matplotlib更加方便簡單。
二、pandas繪圖的基本介面
pandas的兩類基本資料結構series和dataframe都提供了一個統一的介面plot(),該函式的定義如下所示:我們經常看見這樣的操作方式,比如 df.plot()或者是series.plot()當我們檢視該函式的定義的時候卻查不到,這是為什麼呢?plot的本質又是什麼呢?
1、對於Series物件而言:
plot = CachedAccessor("plot", gfx.SeriesPlotMethods)
plot本質上是一個SeriesPlotMethods型別的一個物件,而為什麼可以直接呼叫plot()呢,是因為SeriesPlotMethods類實現了物件呼叫的方法__call__(),檢視定義可得:
class SeriesPlotMethods(BasePlotMethods): """Series plotting accessor and method Examples -------- >>> s.plot.line() >>> s.plot.bar() >>> s.plot.hist() Plotting methods can also be accessed by calling the accessor as a method with the ``kind`` argument: ``s.plot(kind='line')`` is equivalent to ``s.plot.line()`` """ def __call__(self, kind='line', ax=None, figsize=None, use_index=True, title=None, grid=None, legend=False, style=None, logx=False, logy=False, loglog=False, xticks=None, yticks=None, xlim=None, ylim=None, rot=None, fontsize=None, colormap=None, table=False, yerr=None, xerr=None, label=None, secondary_y=False, **kwds): return plot_series(self._data, kind=kind, ax=ax, figsize=figsize, use_index=use_index, title=title, grid=grid, legend=legend, style=style, logx=logx, logy=logy, loglog=loglog, xticks=xticks, yticks=yticks, xlim=xlim, ylim=ylim, rot=rot, fontsize=fontsize, colormap=colormap, table=table, yerr=yerr, xerr=xerr, label=label, secondary_y=secondary_y, **kwds) --------
繪圖時函式的各個引數的解釋:
kind:畫圖的種類,可以是 line(預設),
ax:要在其上進行繪製的matplotlib.subplot物件,如果沒有,則使用預設的subplot物件。
- ‘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
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,
secondary_y=False, **kwds):
---------------------------------------------------------------------------------------------------------------------
下面幾個是DataFrame特有的
sharex: 共用X軸
sharey:
總結:上面只是一些基本的影象引數設定,再具體繪製每一種圖形的時候,還有具體對應的相關設定,這裡就不一一列舉了,在實際的影象中遇到了在進行講解。
2、對於DataFrame資料結構而言:
plot = CachedAccessor("plot", gfx.FramePlotMethods)
plot本質上是一個FramePlotMethods型別的一個物件,而為什麼可以直接呼叫plot()呢,是因為FramePlotMethods類實現了物件呼叫的方法__call__(),相關的定義和函式介面和上面的SeriesPlotMethods型別的定義大致差不多,這裡就不在敘述了。
總結:通過上面的原理解釋,現在明白了為什麼
s.plot(kind='line') 和s.plot.line()這兩者是等價的了,因為,前者的plot()是作為物件呼叫的,本質上plot是一個物件,而line、bar等則是類所實現的方法,當然能夠通過plot物件去呼叫了。
總結:除了上面一些常見的基本圖形以外,dataframe還可以繪製如下一些圖形
These include:
- Scatter Matrix
- Andrews Curves
- Parallel Coordinates
- Lag Plot
- Autocorrelation Plot
- Bootstrap Plot
- RadViz
具體每一種的含義這裡先不討論。
三、pandas繪圖例項
1、bar條形圖
bar()函式有一個重要的引數,stacked,預設為false,表示不堆積,設定為true則表示為堆積。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df2 = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
df2.plot.bar()
plt.show()
2、histogram
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df4 = pd.DataFrame({'a': np.random.randn(1000) + 1, 'b': np.random.randn(1000),'c': np.random.randn(1000) - 1}, columns=['a', 'b', 'c'])
df4.plot.hist(alpha=0.5)
plt.show()
3、box繪圖
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.DataFrame(np.random.rand(10, 5), columns=['A', 'B', 'C', 'D', 'E'])
df.plot.box()
plt.show()
4、area繪圖
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
df.plot.area()
plt.show()
5、Hexagonal Bin Plot
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.DataFrame(np.random.randn(1000, 2), columns=['a', 'b'])
df['b'] = df['b'] + np.arange(1000)
df.plot.hexbin(x='a', y='b', gridsize=25)
plt.show()
總結:熟練使用pandas繪圖在使用pandas進行資料分析的時候非常方便。
上面每一種繪圖方法對應有一系列的引數設定,但是通過轉到定義,並不能檢視到究竟有哪一些引數可以設定,只得到下面這一句話:
def bar(self, **kwds):
"""
Vertical bar plot
Parameters
----------
`**kwds` : optional
Additional keyword arguments are documented in
:meth:`pandas.Series.plot`.
故而詳細的引數列表究竟在哪裡我還沒找到,如果哪位大神世道在哪裡檢視每一種繪圖函式的詳細引數列表,望告知!