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é)果圖,如下所示:
圖1:Pandas繪圖
如上圖所示,如果行索引中包含日期,Pandas 會自動調(diào)用 gct().autofmt_xdate() 來格式化 x 軸。
除了使用默認(rèn)的線條繪圖外,您還可以使用其他繪圖方式,如下所示:
通過關(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é)果:
圖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é)果:
圖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é)果:
圖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:繪制箱型圖
您可以使用 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é)果:
圖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繪制餅狀圖
更多建議: