pandas 常見繪圖總結

pandas 常見繪圖總結

前言

pandas的強大讓人毋庸置疑,一個集數據審閱、處理、分析、可視化於一身的工具,非常好用。
大家都知道,Matplotlib 是衆多 Python 可視化包的鼻祖,也是Python最常用的標準可視化庫,其功能非常強大,同時也非常複雜,想要搞明白並非易事。所幸pandas本身就有數據可視化的功能已經可以滿足我們大部分的要求了,也就省下了我們很多自己使用 如 Matplotlib 來數據可視化的工作。

一 設置字體和顯示中文

Pandas在繪圖時,會顯示中文爲方塊,主要原因有二: matplotlib 字體問題,seaborn 字體問題。
沒有中文字體,所以我們只要手動添加中文字體的名稱就可以了,不過並不是添加我們熟悉的“宋體”或“黑體”這類的名稱,而是要添加字體管理器識別出的字體名稱,matplotlib自身實現的字體管理器在文件font_manager.py中,自動生成的可用字體信息在保存在文件fontList.cache裏,可以搜索這個文件查看對應字體的名稱,例如simhei.ttf對應的名稱爲’SimHei’,simkai.ttf對應的名稱爲’KaiTi_GB2312’等。因此我們只要把這些名稱添加到配置文件中去就可以讓matplotlib顯示中文。


import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['KaiTi']
mpl.rcParams['font.serif'] = ['KaiTi']
mpl.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負號'-'顯示爲方塊的問題,或者轉換負號爲字符串

import seaborn as sns
sns.set_style("darkgrid",{"font.sans-serif":['KaiTi', 'Arial']})   #這是方便seaborn繪圖得時候得字體設置

二 pandas 可視化(0.25.3版本)

“有道無術術尚可求,有術無道,止於術。”
這段話在可視化裏面的意思就是:首相想清楚你要幹嘛,不要一上來就瞎畫一堆圖,自己覺得NB,但是圖都錯的再牛逼也只是好看,並沒什麼作用。
畫圖前你要思考這幾個問題:

  • 你爲什麼要畫圖?
  • 你要畫什麼圖?
  • 你這樣畫圖對不對?

1 線形圖

普通折線圖以折線的上升或下降來表示統計數量的增減變化的統計圖,叫作折線統計圖。折線統計圖不僅可以表示數量的多少,而且可以反映同一事物在不同時間裏的發展變化的情況,雖然它不直接給出精確的數據(當然你也可以加上去),但是能夠顯示數據的變化趨勢,反映事物的變化情況。

pandas 有兩種繪製線形圖的方法,一種是下面這種直接的利用DataFrame.plot()

test_dict = {'銷售量':[1000,2000,5000,2000,4000,3000],'收藏':[1500,2300,3500,2400,1900,3000]}
line = pd.DataFrame(test_dict,index=['一月','二月','三月','四月','五月','六月'])
line.plot()

在這裏插入圖片描述
此外,還有另外的一種,因爲在新版本的pandas當中,DataFrame.plot()不再給出kind=參數(具體細節可以詳見官網),畫一般的線圖推薦使用:DataFrame.plot.line(self, x=None, y=None, **kwargs),例如:

line.plot.line()

在這裏插入圖片描述
一個帶有子圖的例子:

line.plot.line(subplots=True)

在這裏插入圖片描述

2 條形圖

條形統計圖可以清楚地表明各種數量的多少。條形圖是統計圖資料分析中最常用的圖形。按照排列方式的不同,可分爲縱式條形圖和橫式條形圖;按照分析作用的不同,可分爲條形比較圖和條形結構圖。

  • 條形統計圖的特點:
     (1)能夠使人們一眼看出各個數據的大小。
     (2)易於比較數據之間的差別。
     (3)能清楚的表示出數量的多少

2.1 垂直條形圖

DataFrame.plot.bar(self, x=None, y=None, **kwargs)

普通條形圖

line.plot.bar()

在這裏插入圖片描述
堆積條形圖

line.plot.bar(stacked=True)

在這裏插入圖片描述

同理可繪製子圖,並改變X軸的旋轉方向:

line.plot.bar(subplots=True,rot=0)

在這裏插入圖片描述

2.2 水平條形圖

DataFrame.plot.barh(self, x=None, y=None, **kwargs)

畫圖

line.plot.barh()

在這裏插入圖片描述

3 餅圖

適用場景:顯示各項的大小與各項總和的比例。適用簡單的佔比比例圖,在不要求數據精細的情況適用。

優勢:明確顯示數據的比例情況,尤其合適渠道來源分析等場景。

line.plot.pie(subplots=True,figsize=(10, 8),autopct='%.2f%%',radius = 1.2,startangle = 250,legend=False,colormap='viridis')

在這裏插入圖片描述
這裏參數稍微多了一點:

  1. subplots 爲必要參數設置爲True,當然也可以指定y的值。
  2. figsize 圖片的大小。
  3. autopct 顯示百分比。
  4. radius 圓的半徑。
  5. startangle 旋轉角度。
  6. legend 圖例。
  7. colormap 顏色。

4 散點圖

適用場景:顯示若干數據系列中各數值之間的關係,類似XY軸,判斷兩變量之間是否存在某種關聯。散點圖適用於三維數據集,但其中只有兩維需要比較。

優勢:對於處理值的分佈和數據點的分簇,散點圖都很理想。如果數據集中包含非常多的點,那麼散點圖便是最佳圖表類型。

4.1 普通散點圖

line.plot.scatter(x='收藏',y='銷售量')

在這裏插入圖片描述

4.2 氣泡圖

test_dict1 = {'銷售量':[1000,2000,5000,2000,4000,3000],'收藏':[1500,2300,3500,2400,1900,3000],'評價數':[20,400,30,50,500,80]}
line1 = pd.DataFrame(test_dict1,index=['一月','二月','三月','四月','五月','六月'])
line1.plot.scatter(x='收藏',y='銷售量',s=line1['評價數'])

在這裏插入圖片描述

  • 注 氣泡(散點)作爲大小值(三維關係)。

4.3 多組散點圖

ax=line1.plot.scatter(x='評價數',y='收藏',label='評價-收藏',color='c')
line1.plot.scatter(x='評價數',y='銷售量',label='評價-銷售量',ax=ax)

在這裏插入圖片描述

5 面積圖

面積圖又稱區域圖,強調數量隨時間而變化的程度,也可用於引起人們對總值趨勢的注意。堆積面積圖還可以顯示部分與整體的關係。折線圖和麪積圖都可以用來幫助我們對趨勢進行分析,當數據集有合計關係或者你想要展示局部與整體關係的時候,使用面積圖爲更好的選擇。
1、比折線圖看起來更加美觀。
2、能夠突出每個系別所佔據的面積,把握整體趨勢。
3、不僅可以表示數量的多少,而且可以反映同一事物在不同時間裏的發展變化的情況。
4、可以縱向與其他系別進行比較,能夠直觀地反映出差異。

非堆積效果圖

line.plot.area(stacked=False)

在這裏插入圖片描述
生成堆積圖

line.plot.area()

在這裏插入圖片描述

6 箱線圖

“箱線圖作爲描述統計的工具之一,其功能有獨特之處,主要有以下幾點:
1. 識別數據異常值。
2. 查看偏態和尾重。
3. 瞭解數據的形狀。

DataFrame.boxplot(self, column=None, by=None, ax=None, fontsize=None, rot=0, grid=True, figsize=None, layout=None, return_type=None, **kwds)

畫圖

line.boxplot()
#其實與`line.plot.box()`等價

在這裏插入圖片描述

7 直方圖

直方圖是數值數據分佈的精確圖形表示,這是一個連續變量(定量變量)的概率分佈的估計。
作用:
1.整理統計數據,瞭解統計數據的分佈特徵,即數據分佈的集中或離散狀況,從中掌握質量能力狀態。

2.觀察分析生產過程質量是否處於正常、穩定和受控狀態以及質量水平是否保持在公差允許的範圍內。

DataFrame.hist(data, column=None, by=None, grid=True, xlabelsize=None, xrot=None, ylabelsize=None, yrot=None, ax=None, sharex=False, sharey=False, figsize=None, layout=None, bins=10, **kwds)
test_dict2 = {'泊松分佈':np.random.poisson(50,100),'貝塔分佈':np.random.beta(5,1,100)*40}
line2 = pd.DataFrame(test_dict2)
line2
line2.hist(figsize=(10,5),bins=20)

在這裏插入圖片描述

8 核密度曲線

核密度估計(kernel density estimation,KDE)是根據已知的一列數據(x1,x2,…xn)估計其密度函數的過程,即尋找這些數的概率分佈曲線。
畫頻率直方圖就是一種密度估計的方法,這裏的“密度”(density)可以感性得理解爲一個區間(直方圖的組距)內數據數量的多少,右圖即爲這6個數據的密度曲線(這裏簡稱爲密度圖),它是左圖的外輪廓化,數據量越多,直方圖的頂點也越接近一條線。
直方圖和密度圖都是一組數據在座標軸上“疏密程度”的可視化,只不過直方圖用條形圖顯示,而密度圖使用擬合後的(平滑)的曲線顯示,“峯”越高,表示此處數據越“密集”。“密度”越高,如下圖。

line2.hist(bins=20)
line2.plot.kde(subplots=True)
line2.plot.density(subplots=True)

在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述

9 hexbin(六邊形圖)

可以使用DataFrame.plot.hexbin(self, x, y, C=None, reduce_C_function=None, gridsize=None, **kwargs)創建六邊形圖形圖。

如果您的數據太密集,可以單獨繪製每個點,六角形箱體圖可以是散點圖的有用替代方法。

說實話,我也不知道這個圖是用來幹啥的,參考資料文獻也比較少,如果哪位大神懂,還望不吝賜教。

發佈了10 篇原創文章 · 獲贊 33 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章