Pandas 可視化指南:從零教你繪製數據圖表

來源:量子位

數據可視化本來是一個非常複雜的過程,但隨着 Pandas 數據幀 plot() 函數的出現,使得創建可視化圖形變得很容易。

在數據幀上進行操作的 plot() 函數只是 matplotlib 中 plt.plot() 函數的一個簡單包裝 ,可以幫助你在繪圖過程中省去那些長長的 matplotlib 代碼。

最近,一位來自印度的小哥以 2019 年世界幸福指數的數據爲例,詳細講述了在 Pandas 中 plot() 函數的各種參數設置的小技巧,熟練掌握這些技巧後,你也能繪製出豐富多彩的可視化圖表。

導入數據

在繪製圖形前,我們首先需要導入 csv 文件:

import pandas as pd
df=pd.read_csv(‘./world-happiness-report-2019.csv’)
df.head(3)

這個 csv 圖標的內容是各個國家按照不同維度評價的幸福指數(數據下載地址見文末):

數據幀中一些列的名稱比較冗長,可以重命名使其更加簡潔:

df.rename(columns={“Country (region)”: “Country”, “Log of GDP\nper capita”: “Log_GDP_per_capita”, “Healthy life\nexpectancy”:”Health_life_expect”},inplace=True)
df.columns

繪製柱狀圖、散點圖等常見圖形

從最近簡單的柱狀圖開始,只統計腐敗程度、自由度、寬容度、社會支持等幾個維度

%matplotlib tk
df1=df[:5]
df1.plot(‘Country’,[‘Corruption’,’Freedom’,’Generosity’,’Social support’],kind = ‘bar’)

嫌直接寫名稱太麻煩?沒關係,我們也可以用所在列的數字來繪製,比如上述 4 個列分別爲 7、6、8、5:

%matplotlib tk
df1=df[:5]
df1.plot(‘Country’,[7,6,8,5],kind = ‘bar’)

在上面的代碼中 kind = ‘bar’,所以繪製的圖形是柱狀圖,如果我們把參數改成 kind = ‘line’,畫出的就是線狀圖

df1=df[:5]
df1.plot(‘Country’,[‘Corruption’,’Freedom’,’Generosity’,’Social support’],kind = ‘line’)

同樣的,如果把參數改成 kind = ‘line’,還能繪製出箱形圖:

df[:5].plot(x=’Country’,kind=’box’)

對於散點圖,設置 kind=’scatter’,繪製出腐敗程度與自由度之間的關係,用 color=’R’將點定義爲紅色:

df.plot(x=’Corruption’,y=’Freedom’,kind=’scatter’,color=’R’)

此外,Pandas 中還有一個輔助函數 pandas.plotting.table,它創建一個來自數據幀的表格,並將其添加到 matplotlib Axes 實例中。

from pandas.plotting import table
df1=df[:5]
df1=df.loc[:5,[‘Country (region)’,’Corruption’,’Freedom’,’Generosity’,’Social support’]]
ax=df1.plot(‘Country (region)’,[‘Corruption’,’Freedom’,’Generosity’,’Social support’], kind = ‘bar’, title =’Bar Plot’,legend=None)
table(ax, np.round(df1.describe(), 2),loc=’upper right’)

座標軸的設置

取值範圍

使用 xlim 和 ylim 兩個參數可設置 x 和 y 軸的範圍。在折線圖中,我們要將 x 軸設置爲 0 到 20,y 限制爲從 0 到 100。

df1=df[:20]
df1[‘Freedom’].plot(kind=’line’,xlim=(0,20),ylim=(0,100))

x、y 軸刻度

有時候座標軸上的刻度並不理想,我們希望在上面標上我們喜歡的數值。

比如對於 x 軸,我們想要標上 0、10、15 和 20 幾個值;對於 y 軸,我們想要標上 0、50、70、100 幾個值,可以在 xticksyticks 參數中悉數列出。

df[:20][‘Freedom’].plot(kind=’line’,xlim=(0,20),ylim=(0,100),color=’red’,xticks=([0,10,15,20]),yticks=([0,50,70,100]), title = ‘xticks’)

但是用列表來制定座標刻度的方法,在數值太多的時候就比較麻煩了,因此我們還能通過指定刻度間隔的方法來繪製座標軸,比如指定 x 軸間隔是 1,y 軸間隔是 10:

df[:20][‘Freedom’].plot(kind=’line’,xlim=(0,20),ylim=(0,100),color=’red’,xticks=([w1 for w in range(20)]),yticks=([w10 for w in range(40)]))

如果我們不希望在座標軸上看到數字,而是想要設置標籤。我們還可以將 x 軸標籤更改爲文本標籤 “低、中、高” 這種樣式。

ax=df[:20][‘Freedom’].plot(kind=’line’,xlim=(0,20),ylim=(0,100),color=’red’,xticks=([0,10,20]),yticks=([w*30 for w in range(40)]))
ax.set_xticklabels([‘Low’,’Med’,’High’])

對數座標

如果數據的跨度範圍非常大,橫跨好幾個數量級,那麼用線性座標就無法很好地展示數據。這時候我們需要用到對數座標,設置方法是將 logx 或者 logy 的值設置爲 Ture

如果我們只想設置 x 軸爲對數座標,y 軸仍保持線性座標,那麼

df[:20][‘Freedom’].plot(kind=’line’,xlim=(0,1000),ylim=(0,100),color=’red’,logx=True)

其他高階用法

可以使用 stacked 參數來繪製帶有條形圖的堆疊圖。在這裏,我們繪製堆疊的水平條,stacked 設置爲 True。

將 grid 參數設置爲 True,可以給圖表加入網格。

有了 subplot 參數還可以繪製子圖,根據需要指定行數和列數以及繪圖的數量。

在上面的子圖中,我們沒有給子圖添加標題。當 subplot 設置爲 True 時,在設置一組 title 的值,即可在列表上方加入標題。

表格下載地址:
https://www.kaggle.com/PromptCloudHQ/world-happiness-report-2019/version/1

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/brrbvsXApnmyFVQjezehtA