Python 自動化辦公-玩轉圖表

今天,我們來實現這樣一種圖表:

先看數據:


   sepal_length  sepal_width  petal_length  petal_width    species
0             5.1          3.5           1.4          0.2     setosa
1             4.9          3.0           1.4          0.2     setosa
2             4.7          3.2           1.3          0.2     setosa
3             4.6          3.1           1.5          0.2     setosa
4             5.0          3.6           1.4          0.2     setosa
..            ...          ...           ...          ...        ...
145           6.7          3.0           5.2          2.3  virginica
146           6.3          2.5           5.0          1.9  virginica
147           6.5          3.0           5.2          2.0  virginica
148           6.2          3.4           5.4          2.3  virginica
149           5.9          3.0           5.1          1.8  virginica

原始數據見https://codechina.csdn.net/mirrors/mwaskom/seaborn-data

爲你解釋一下示例數據。它是由五列組成的,分別表示鳶尾花的花萼長度、寬度,鳶尾花的花瓣長度、寬度(你可以通過百度來搜索鳶尾花的圖片,來了解什麼是花萼的長寬,什麼是花瓣的長寬),以及三種鳶尾花品種(setosa 山鳶尾,versicolor 雜色鳶尾,virginica 維吉尼亞鳶尾)。

通過散點圖的方式採用不同維度展示花的特性,讓你能根據顏色把三種花區分出來。

第二部分是指定圖表類型,它是由“kind = 'scatter'”參數指定的。因爲 pairplot() 函數支持散點圖和迴歸圖 (kind='reg'),我們需要關注分佈情況,所以使用了散點圖的方式來展示數據。第三部分是點的樣式。繪製的散點圖中的每個點,也可以單獨設置它們的樣式。例如我指定了每個點的大小“height=2”,以及指定了色彩樣式“palette='husl'”,併爲每個列指定不同的顏色“hue = 'species'”。

最後一步是繪製圖形,由於 seaborn 基於 matplotlib 實現圖形,因此需要使用 plt.show() 函數進行圖形的繪製,那麼鳶尾花數據的散點圖繪製結果如下:

在截圖中,基於花的四個屬性,我採用了不同的維度進行繪圖。同時你會發現,在某一維度下,其中一種顏色和其他顏色有明顯的分界,非常容易把其中一種和另外兩種花區分開。通過觀察散點圖,你會得到這樣一個結論,使用合理的圖形,能夠幫你更好地解釋某個晦澀難懂的概念,也能更容易從數據中發現規律。那既然不同的圖表能帶來不同的價值,

如何選擇合適的圖表

由於 seaborn 支持的圖表非常豐富,在有經驗的開發工程師進行圖表選擇時,絕不會逐個嘗試。他們會根據圖表的應用場景來選擇適合的種類,再通過適合的種類再細化到圖表的具體樣式。

但是你可能並沒有使用過 seaborn 的圖表,甚至也不瞭解圖表會有多少種類型、每種類型裏包含着哪些具體的圖表。因此根據是否有圖表的使用經驗,你可以按照我給你提供的兩種方法來根據工作場景,找到最適合你的圖表。這兩種解決辦法總結來說就是參考圖例和參考分類。

第一種解決辦法是參考圖例,我把這種情況稱作是“手中有劍、心中無劍”,“手中有劍”代表着你能看到圖表一共有哪些,但是心中還不清楚哪種更適合你的場景。在 seaborn 的官方文檔中,列舉了各種圖例,它的地址和截圖如下:

第二種解決辦法是參考分類,我把這種情況稱作“心中有劍,手中無劍”,“心中有劍”也就意味着你在心裏已經把應用場景鎖定在某一個圖表的大類中,但是這一大類裏包含了哪些具體的圖表,要看 seaborn 能否支持。

這時候,你就要根據你的業務場景,分析出它都對應了以下四個分類中的哪一類,再按照分類通過官方文檔 API 頁面找到具體的圖表函數。四個分類如下:

  • 關係類,用於展示數據集中多個變量之間的關係,relplot()、scatterplot()、lineplot() 都屬於關係類。
  • 分佈類,用於展示數據集中多個變量的分佈情況,displot()、kdeplot() 是這一類經常使用的圖表類型。
  • 線性關係類,是把多個變量聯繫起來,觀察每個採樣的線性變化趨勢。regplot() 和 lmplot() 經常用於表示線性關係。
  • 結構化多圖,用於把多種方式的分析數據放在一起進行展示。例如我們分析鳶尾花就使用了散點圖 + 柱狀圖的方式,但是散點圖更能體現出它的各種屬性之間的關係。

你在心中掌握的圖表分類就是“寶劍”,通過分類能夠更快找到特定的圖表類型。這兩種方式是基於不同場景,快速選擇圖表的方法。因爲選擇圖表最核心的思路還是要基於場景,而不能基於個人的喜好或結果的美觀性來選擇圖表,避免以偏概全。

練習題

如果我的工作場景需要展示當前地區的房價走勢,你會選擇什麼樣的圖表進行展示呢?你能否用 seaborn 將這一圖表繪製出來呢?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章