Pandas繪圖教程

2022-07-15 11:00 更新

Pandas 在數(shù)據(jù)分析、數(shù)據(jù)可視化方面有著較為廣泛的應(yīng)用,Pandas 對 Matplotlib 繪圖軟件包的基礎(chǔ)上單獨封裝了一個plot()接口,通過調(diào)用該接口可以實現(xiàn)常用的繪圖操作。本節(jié)我們深入講解一下 Pandas 的繪圖操作。

Pandas 之所以能夠?qū)崿F(xiàn)了數(shù)據(jù)可視化,主要利用了 Matplotlib 庫的 plot() 方法,它對 plot() 方法做了簡單的封裝,因此您可以直接調(diào)用該接口。下面看一組簡單的示例:

import pandas as pd
import numpy as np
#創(chuàng)建包含時間序列的數(shù)據(jù)
df = pd.DataFrame(np.random.randn(8,4),index=pd.date_range('2/1/2020',periods=8), columns=list('ABCD'))
df.plot()

輸結(jié)果圖,如下所示:

pandas matplotlib

圖1:Pandas繪圖

如上圖所示,如果行索引中包含日期,Pandas 會自動調(diào)用 gct().autofmt_xdate() 來格式化 x 軸。

除了使用默認(rèn)的線條繪圖外,您還可以使用其他繪圖方式,如下所示:

  • 柱狀圖:bar() 或 barh()
  • 直方圖:hist()
  • 箱狀箱:box()
  • 區(qū)域圖:area()
  • 散點圖:scatter()

通過關(guān)鍵字參數(shù)kind可以把上述方法傳遞給 plot()。

柱狀圖

創(chuàng)建一個柱狀圖,如下所示:

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d','e'])
#或使用df.plot(kind="bar")
df.plot.bar()

輸出結(jié)果:

Pandas bar()

圖2:Pandas繪制柱狀圖

通過設(shè)置參數(shù)stacked=True可以生成柱狀堆疊圖,示例如下:

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(10,5),columns=['a','b','c','d','e'])
df.plot(kind="bar",stacked=True)
#或者使用df.plot.bar(stacked="True")

輸出結(jié)果:

pandas bar()

圖3:Pandas繪制柱狀圖

如果要繪制水平柱狀圖,您可以使用以下方法:

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d'])
print(df)
df.plot.barh(stacked=True)

輸出結(jié)果:

水平柱狀圖

圖4:水平柱狀圖

直方圖

 plot.hist() 可以實現(xiàn)繪制直方圖,并且它還可以指定 bins(構(gòu)成直方圖的箱數(shù))。

import pandas as pd
import numpy as np
df = pd.DataFrame({'A':np.random.randn(100)+2,'B':np.random.randn(100),'C':
np.random.randn(100)-2}, columns=['A', 'B', 'C'])
print(df)
#指定箱數(shù)為15
df.plot.hist(bins=15)

輸出結(jié)果:

pandas直方圖

圖5:繪制直方圖 

給每一列數(shù)據(jù)都繪制一個直方圖,需要使以下方法:

import pandas as pd
import numpy as np
df = pd.DataFrame({'A':np.random.randn(100)+2,'B':np.random.randn(100),'C':
np.random.randn(100)-2,'D':np.random.randn(100)+3},columns=['A', 'B', 'C','D'])
#使用diff繪制
df.diff().hist(color="r",alpha=0.5,bins=15)

輸出結(jié)果:

直方圖

圖6:直方圖繪制

箱型圖

通過調(diào)用 Series.box.plot() 、DataFrame.box.plot() 或者 DataFrame.boxplot() 方法來繪制箱型圖,它將每一列數(shù)據(jù)的分布情況,以可視化的圖像展現(xiàn)出來。

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(10, 4), columns=['A', 'B', 'C', 'D'])
df.plot.box()

輸出結(jié)果:

箱型圖繪制

圖7:繪制箱型圖

區(qū)域圖

您可以使用 Series.plot.area() 或 DataFrame.plot.area() 方法來繪制區(qū)域圖。

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(5, 4), columns=['a', 'b', 'c', 'd'])
df.plot.area()

輸出結(jié)果:

繪制區(qū)域圖

圖8:繪制區(qū)域圖

散點圖

使用 DataFrame.plot.scatter() 方法來繪制散點圖,如下所示:

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(30, 4), columns=['a', 'b', 'c', 'd'])
df.plot.scatter(x='a',y='b')

輸出結(jié)果:

散點圖

圖9:繪制散點圖

餅狀圖

餅狀圖可以通過 DataFrame.plot.pie() 方法來繪制。示例如下:

import pandas as pd
import numpy as np
df = pd.DataFrame(3 * np.random.rand(4), index=['go', 'java', 'c++', 'c'], columns=['L'])
df.plot.pie(subplots=True)

輸出結(jié)果:

餅狀圖

圖10:Pandas繪制餅狀圖

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號