![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377802753240.jpg)
我之前一直守著 matplotlib 用的原因,就是為了我學會它複雜的語法,已經「沉沒"在裡面的幾百個小時的時間成本。這也導致我花了不知多少個深夜,在 StackOverflow 上搜尋如何「格式化日期」或「增加第二個Y軸」。
但我們現在有一個更好的選擇了 —— 例如易於使用、文檔健全、功能強大的開源 Python 繪圖庫 Plotly。今天就帶你深入體驗下,了解它如何用超簡單的(甚至只要一行!)程式碼,繪製出更棒的圖表。
本文中所有程式碼都已經在 Github 上開源,所有的圖表都是可互動的,請使用Jupyter notebook檢視 。
(Github 原始碼位址:https://github.com/WillKoehrsen/Data-Analysis/blob/master/plotly/Plotly Whirlwind Introduction.ipynb)
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377802748727.jpg)
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377802769713.jpg)
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377802874241.jpg)
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377802872084.gif)
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377802868915.jpg)
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377802812112.jpg)
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377802997440.jpg)
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377802987811.jpg)
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377802934117.jpg)
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377802938240.gif)
###################################### ###(plotly 繪製的範例圖表。圖片來源:plot.ly)######Plotly 概述######plotly 的Python 軟體包是一個開源的程式碼庫,它基於plot.js,而後者基於d3.js。我們實際使用的則是一個對 plotly 進行封裝的函式庫,名叫 cufflinks,它能讓你更方便地使用 plotly 和 Pandas 資料表協同工作。 ######*註:Plotly 本身就是一個擁有多個不同產品和開源工具集的視覺化技術公司。 Plotly 的 Python 函式庫是可以免費使用的,在離線模式可以建立數量不限的圖表,線上模式因為用到了 Plotly 的共享服務,只能產生並分享 25 張圖表。 ######本文中的所有視覺化圖表都是在 Jupyter Notebook 中使用離線模式的 plotly cufflinks 函式庫完成的。在使用pip install cufflinks plotly 完成安裝後,你可以用下面這樣的程式碼在Jupyter 裡完成導入:##################單變量分佈:柱狀圖和箱形圖#########單變量分析圖往往是開始資料分析時的標準做法,而長條圖基本上算是單變量分佈分析時必備的圖表之一(雖然它還有一些不足)。 ######就拿部落格文章按讚總數為例(原始資料見Github:https://github.com/WillKoehrsen/Data-Analysis/tree/master/medium ),做一個簡單的互動式長條圖:###############(程式碼中的df 是標準的Pandas dataframe 物件)###############(使用plotly cufflinks 建立的交互式長條圖)######對於已經習慣matplotlib 的同學,你們只需要多打一個字母(把.plot 改成.iplot ),就能獲得看起來更加美觀的交互式圖表!點擊圖片上的元素就能顯示出詳細資訊、隨意縮放,還附帶(我們接下來會提到的)高亮篩選某些部分等超棒功能。 ######如果你想繪製堆疊柱狀圖,也只需要這樣:#########################對pandas 資料表進行簡單的處理,並產生條形圖:########################就像上面展示的那樣,我們可以將plotly cufflinks 和pandas 的能力整合在一起。例如,我們可以先用 .pivot() 進行資料透視表分析,然後再產生長條圖。 ######例如統計不同發表管道中,每篇文章帶來的新增粉絲數:#####################
互動式圖表帶來的好處是,我們可以隨意探索資料、分割子項目進行分析。箱型圖能提供大量的信息,但如果你看不到具體數值,你很可能會錯過其中的一大部分!
散佈圖
散佈圖是大多數分析的核心內容,它能讓我們看出一個變數隨著時間推移的變化情況,或是兩個(或多個)變數之間的關係變化情況。
時間序列分析
在現實世界中,相當部分的資料都帶有時間元素。幸運的是,plotly cufflinks 天生就帶有支援時間序列視覺化分析的功能。
以我在「Towards Data Science」網站上發表的文章資料為例,讓我們以發佈時間為索引建立一個資料集,看看文章熱度的變化:
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377802976838.jpg)
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377803063129.gif)
在上圖中,我們用一行程式碼完成了幾件事:
- 自動產生美觀的時間序列X 軸
- 增加第二條Y 軸,因為兩個變數的範圍並不一致
- 把文章標題放在滑鼠懸停時顯示的標籤中
##為了顯示更多數據,我們可以方便地添加文字註解:
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377803130353.jpg)
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377803145975.jpg)
#(帶有文字註解的散佈圖)
在下面的程式碼中,我們將一個雙變數散佈圖按第三個分類變數進行著色:
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377803111666.jpg)
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377803110596.jpg)
接下來我們要玩點複雜的:對數座標軸。我們透過指定plotly 的佈局(layout)參數來實現這一點(關於不同的佈局,請參考官方文件https://plot.ly/python/reference/ ),同時我們把點的尺寸(size參數)和一個數值變數read_ratio (閱讀比例)綁定,數字越大,泡泡的大小也越大。
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377803169564.jpg)
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377803111156.jpg)
如果想要更複雜一點(詳見Github 的原始碼),我們甚至可以在一張圖中塞進4個變數! (然而不推薦你們真的這麼搞)
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377803158900.jpg)
和前面一樣,我們可以將pandas 和plotly cufflinks 結合起來,實現許多有用的圖表:
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377803210259.jpg)
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377803214061.jpg)
建議你查看官方文檔,或原始碼,裡面有更多的範例和函數實例。只需要簡單的一兩行程式碼,就可以為你的圖表加上文字註釋,輔助線,最佳擬合線等有用的元素,並且保持原有的各種互動功能。
進階繪圖功能
接下來,我們要詳細介紹幾種特殊的圖表,平時你可能並不會很常用到它們,但我保證只要你用好了它們,一定能讓人刮目相看。我們要用 plotly 的 figure_factory 模組,只需要一行程式碼,就能產生超棒的圖表!
散佈圖矩陣
假如我們要探索許多不同變數之間的關係,散佈圖矩陣(也稱為SPLOM)就是個很棒的選擇:
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377803245498.jpg)
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377803263726.jpg)
即使是這樣複雜的圖形,也是完全可互動的,讓我們能更詳盡地對資料進行探索。
關係熱圖
為了體現多個數值變數間的關係,我們可以計算它們的相關性,然後用標註熱度圖的形式進行視覺化:
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377803267648.jpg)
自訂主題
除了層出不窮的各種圖表外,Cufflinks 還提供了許多不同的著色主題,方便你輕鬆切換各種不同的圖表風格。下面兩張圖分別是「太空」主題和「ggplot」主題:
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377803255058.jpg)
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377803351920.jpg)
#此外,還有3D 圖表(曲面和泡泡):
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377803367301.jpg)
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377803318576.jpg)
對有興趣研究的使用者來說,做張餅圖也不是什麼難事:
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377803391065.jpg)
在Plotly 圖表工坊(Plotly Chart Studio)裡編輯
當你在Jupyter Notebook 裡產生了這些圖表之後,你將會發現圖表的右下角出現了一個小小的鏈接,寫著「Export to plot.ly(發佈到plot.ly)」。如果你點擊這個鏈接,你將會跳到一個「圖表工坊」(https://plot.ly/create/)。
在這裡,你可以在最終展示之前進一步修改和潤飾你的圖表。可以加上標註,選擇某些元素的顏色,把一切都整理清楚,產生一個超棒的圖表。之後,你也可以將它發佈到網路上,產生一個供其他人查閱的連結。
下面兩張圖是在圖表工坊裡製作的:
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377803312508.jpg)
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377803347867.jpg)
#講了這麼多,看都看累了吧?然而我們還沒有窮盡這個函式庫的所有功能。限於篇幅,有些更棒的圖表和範例,只好請大家訪問 plotly 和 cufflinks 的官方文件去一一查看咯。
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377803341537.jpg)
(Plotly 互動式地圖,顯示了美國國內的風力發電場資料。來源:plot.ly)
最後…
關於沉沒成本謬誤,最糟糕的一點在於,人們往往只能在放棄先前的努力時,才能意識到自己浪費了多少時間。
在選擇一個繪圖庫的時候,你最需要的幾個功能有:
快速探索資料所需的一行程式碼圖表
- 拆分/研究資料所需的互動元素
- 當需要時可以深入細節資訊的選項
- 最終展示前能輕易進行客製化
##從現在看來,要用Python 語言實現以上功能的最佳選擇非plotly 莫屬。它讓我們快速產生視覺化圖表,互動功能使我們更好地理解資訊。
我承認,繪圖絕對是資料科學工作中最讓人享受的部分,而 plotly 能讓你更愉悅地完成這些任務。
![功能强大的开源 Python 绘图库](https://img.php.cn/upload/article/000/465/014/168377803326735.jpg)
(用一張圖表顯示一下用Python 繪圖的愉悅程度隨著時間變化。來源towardsdatascience.com)
2022年是時候升級你的Python 繪圖庫了,讓自己在資料科學和視覺化方面變得更快、更強、更美吧!
以上是功能強大的開源 Python 繪圖庫的詳細內容。更多資訊請關注PHP中文網其他相關文章!