1. 程式人生 > >pandas繪圖詳細教程

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物件。 

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:

具體每一種的含義這裡先不討論。

三、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`.

故而詳細的引數列表究竟在哪裡我還沒找到,如果哪位大神世道在哪裡檢視每一種繪圖函式的詳細引數列表,望告知!