【轉】Python 可視化神器-Plotly Express


轉自:https://mp.weixin.qq.com/s/FNpNJSMK5Vs8pwi0PbbBzw

說明:圖片無法直接復制,請查看原文


 

導讀:Plotly Express 是一個新的高級 Python 可視化庫:它是 Plotly.py 的高級封裝,它為復雜的圖表提供了一個簡單的語法。

 

受 Seaborn 和 ggplot2 的啟發,它專門設計為具有簡潔,一致且易於學習的 API :只需一次導入,你就可以在一個函數調用中創建豐富的交互式繪圖,包括分面繪圖(faceting)、地圖、動畫和趨勢線。它帶有數據集、顏色面板和主題,就像 Plotly.py 一樣。

 

 

01 Plotly Express 入門之路

 

Plotly Express 完全免費:憑借其寬松的開源 MIT 許可證,你可以隨意使用它(是的,甚至在商業產品中!)。 

 

最重要的是,Plotly Express 與 Plotly 生態系統的其他部分完全兼容:在你的 Dash 應用程序中使用它,使用 Orca 將你的數據導出為幾乎任何文件格式,或使用JupyterLab 圖表編輯器在 GUI 中編輯它們!

 

用 pip install plotly_express 命令可以安裝 Plotly Express。

 

 

02 使用 Plotly Express 輕松地進行數據可視化

 

一旦導入Plotly Express(通常是 px ),大多數繪圖只需要一個函數調用,接受一個整潔的Pandas dataframe,並簡單描述你想要制作的圖。如果你想要一個基本的散點圖,它只是 px.scatter(data,x ="column_name",y ="column_name")

 

以下是 內置的 Gapminder 數據集 的示例,顯示2007年按國家/地區的人均預期壽命和人均GDP 之間的趨勢:

 

import plotly_express as px
gapminder = px.data.gapminder()
gapminder2007 = gapminder.query('year == 2007')
px.scatter(gapminder2007, x='gdpPercap', y='lifeExp')

 

 

如果你想通過大陸區分它們,你可以使用 color 參數為你的點着色,由 px 負責設置默認顏色,設置圖例等:

 

 

這里的每一點都是一個國家,所以也許我們想要按國家人口來衡量這些點...... 沒問題:這里也有一個參數來設置,它被稱為 size

 

 

如果你好奇哪個國家對應哪個點? 可以添加一個 hover_name ,你可以輕松識別任何一點:只需將鼠標放在你感興趣的點上即可! 事實上,即使沒有 hover_name ,整個圖表也是互動的:

 

 

也可以通過 facet_col ="continent" 來輕松划分各大洲,就像着色點一樣容易,並且讓我們使用 x軸 對數(log_x)以便在我們在圖表中看的更清晰:

 

 

也許你不僅僅對 2007年 感興趣,而且你想看看這張圖表是如何隨着時間的推移而演變的。可以通過設置 animation_frame="year" (以及 animation_group ="country" 來標識哪些圓與控制條中的年份匹配)來設置動畫。

 

在這個最終版本中,讓我們在這里調整一些顯示,因為像“gdpPercap” 這樣的文本有點難看,即使它是我們的數據框列的名稱。我們可以提供更漂亮的“標簽” (labels),可以在整個圖表、圖例、標題軸和懸停(hovers)中應用。我們還可以手動設置邊界,以便動畫在整個過程中看起來更棒:

 

 

因為這是地理數據,我們也可以將其表示為動畫地圖,因此這清楚地表明 Plotly Express 不僅僅可以繪制散點圖(不過這個數據集缺少前蘇聯的數據)。

 

 

事實上,Plotly Express 支持三維散點圖、三維線形圖、極坐標和地圖上三元坐標以及二維坐標。條形圖(Bar)有二維笛卡爾和極坐標風格。

 

進行可視化時,你可以使用單變量設置中的直方圖(histograms)和箱形圖(box)或小提琴圖(violin plots),或雙變量分布的密度等高線圖(density contours)。大多數二維笛卡爾圖接受連續或分類數據,並自動處理日期/時間數據。可以查看我們的圖庫 (ref-3) 來了解每個圖表的例子。

 

 

 

上述動態圖包含10多張圖片的可視化,本文譯者已將代碼整合到 jupyter notebook 文件中,在公眾號后台對話框回復Plotly即可獲得源代碼。

 

 

03 可視化分布

 

數據探索的主要部分是理解數據集中值的分布,以及這些分布如何相互關聯。Plotly Express 有許多功能來處理這些任務。

 

使用直方圖(histograms),箱形圖(box)或小提琴圖(violin plots)可視化單變量分布:

 

  • 直方圖

 

 

  • 箱形圖

 

 

  • 小提琴圖

 

還可以創建聯合分布圖(marginal rugs),使用直方圖,箱形圖(box)或小提琴來顯示雙變量分布,也可以添加趨勢線。Plotly Express 甚至可以幫助你在懸停框中添加線條公式和R²值! 它使用 statsmodels 進行普通最小二乘(OLS)回歸或局部加權散點圖平滑(LOWESS)。

 

04 顏色面板和序列

 

在上面的一些圖中你會注意到一些不錯的色標。在 Plotly Express 中, px.colors 模塊包含許多有用的色標和序列:定性的、序列型的、離散的、循環的以及所有你喜歡的開源包:ColorBrewer、cmocean 和 Carto 。我們還提供了一些功能來制作可瀏覽的樣本供你欣賞(ref-3):

 

定性的顏色序列:

 

 

眾多內置順序色標中的一部分:

 

05 用一行 Python 代碼進行交互式多維可視化

 

我們特別為我們的交互式多維圖表感到自豪,例如散點圖矩陣(SPLOMS)、平行坐標和我們稱之為並行類別的並行集。通過這些,你可以在單個圖中可視化整個數據集以進行數據探索。在你的Jupyter 筆記本中查看這些單行及其啟用的交互:

 

 

散點圖矩陣(SPLOM)允許你可視化多個鏈接的散點圖:數據集中的每個變量與其他變量的關系。數據集中的每一行都顯示為每個圖中的一個點。你可以進行縮放、平移或選擇操作,你會發現所有圖都鏈接在一起!

 

 

平行坐標允許你同時顯示3個以上的連續變量。dataframe 中的每一行都是一行。你可以拖動尺寸以重新排序它們並選擇值范圍之間的交叉點。

 

 

並行類別是並行坐標的分類模擬:使用它們可視化數據集中多組類別之間的關系。

 

 

06 Plotly 生態系統的一部分

 

Plotly Express 之於 Plotly.py 類似 Seaborn 之於 matplotlib:Plotly Express 是一個高級封裝庫,允許你快速創建圖表,然后使用底層 API 和生態系統的強大功能進行修改。

 

對於Plotly 生態系統,這意味着一旦你使用 Plotly Express 創建了一個圖形,你就可以使用Themes,使用 FigureWidgets 進行命令性編輯,使用 Orca 將其導出為幾乎任何文件格式,或者在我們的 GUI JupyterLab 圖表編輯器中編輯它 。

 

主題(Themes)允許你控制圖形范圍的設置,如邊距、字體、背景顏色、刻度定位等。你可以使用模板參數應用任何命名的主題或主題對象:

 

 

有三個內置的 Plotly 主題可以使用, 分別是 plotly, plotlywhite 和 plotlydark。

 

px 輸出繼承自 Plotly.py 的 Figure 類 ExpressFigure 的對象,這意味着你可以使用任何 Figure 的訪問器和方法來改變 px生成的繪圖。例如,你可以將 .update() 調用鏈接到 px 調用以更改圖例設置並添加注釋。 .update() 現在返回修改后的數字,所以你仍然可以在一個很長的 Python 語句中執行此操作:

 

 

在這里,在使用 Plotly Express 生成原始圖形之后,我們使用 Plotly.py 的 API 來更改一些圖例設置並添加注釋。

 

 

07 能夠與 Dash 完美匹配

 

Dash 是 Plotly 的開源框架,用於構建具有 Plotly.py 圖表的分析應用程序和儀表板。Plotly Express 產生的對象與 Dash 100%兼容,只需將它們直接傳遞到 dash_core_components.Graph,如下所示: dcc.Graph(figure = px.scatter(...))。這是一個非常簡單的 50行 Dash 應用程序的示例,它使用 px 生成其中的圖表:

 

 

這個 50 行的 Dash 應用程序使用 Plotly Express 生成用於瀏覽數據集的 UI 。

 

 

08 設計理念:為什么我們創建 Plotly Express?

 

可視化數據有很多原因:有時你想要提供一些想法或結果,並且你希望對圖表的每個方面施加很多控制,有時你希望快速查看兩個變量之間的關系。這是交互與探索的范疇。

 

Plotly.py 已經發展成為一個非常強大的可視化交互工具:它可以讓你控制圖形的幾乎每個方面,從圖例的位置到刻度的長度。不幸的是,這種控制的代價是冗長的:有時可能需要多行 Python 代碼才能用 Plotly.py 生成圖表。

 

我們使用 Plotly Express 的主要目標是使 Plotly.py 更容易用於探索和快速迭代。

 

我們想要構建一個庫,它做出了不同的權衡:在可視化過程的早期犧牲一些控制措施來換取一個不那么詳細的 API,允許你在一行 Python 代碼中制作各種各樣的圖表。然而,正如我們上面所示,該控件並沒有消失:你仍然可以使用底層的 Plotly.py 的 API 來調整和優化用 Plotly Express 制作的圖表。

 

支持這種簡潔 API 的主要設計決策之一是所有 Plotly Express 的函數都接受“整潔”的 dataframe 作為輸入。

 

每個 Plotly Express 函數都體現了dataframe 中行與單個或分組標記的清晰映射,並具有圖形啟發的語法簽名,可讓你直接映射這些標記的變量,如 x 或 y 位置、顏色、大小、 facet-column 甚至是 動畫幀到數據框(dataframe)中的列。

 

當你鍵入 px.scatter(data,x ='col1',y='col2') 時,Plotly Express 會為數據框中的每一行創建一個小符號標記 - 這就是 px.scatter 的作用 - 並將 “col1” 映射到 x 位置(類似於 y 位置)。

 

這種方法的強大之處在於它以相同的方式處理所有可視化變量:你可以將數據框列映射到顏色,然后通過更改參數來改變你的想法並將其映射到大小或進行行分面(facet-row)。

 

接受整個整潔的 dataframe 的列名作為輸入(而不是原始的 numpy 向量)也允許 px 為你節省大量的時間,因為它知道列的名稱,它可以生成所有的 Plotly.py 配置用於標記圖例、軸、懸停框、構面甚至動畫幀。但是,如上所述,如果你的 dataframe 的列被笨拙地命名,你可以告訴 px 用每個函數的 labels 參數替換更好的。

 

僅接受整潔輸入所帶來的最終優勢是它更直接地支持快速迭代:你整理一次數據集,從那里可以使用 px 創建數十種不同類型的圖表,包括在 SPLOM 中可視化多個維度 、使用平行坐標、在地圖上繪制,在二維、三維極坐標或三維坐標中使用等,所有這些都不需要重塑你的數據!

 

我們沒有以權宜之計的名義犧牲控制的所有方面,我們只關注你想要在數據可視化過程的探索階段發揮的控制類型。你可以對大多數函數使用 category_orders 參數來告訴 px 你的分類數據“好”、“更好”、“最佳” 等具有重要的非字母順序,並且它將用於分類軸、分面繪制 和圖例的排序。

 

你可以使用 color_discrete_map (以及其他 * _map 參數)將特定顏色固定到特定數據值(如果這對你的示例有意義)。當然,你可以在任何地方重構 color_discrete_sequence 或 color_continuous_scale (和其他 *_sequence 參數)。

 

在 API 級別,我們在 px 中投入了大量的工作,以確保所有參數都被命名,以便在鍵入時最大限度地發現:所有 scatter -類似的函數都以 scatter 開頭(例如 scatter_polar, scatter_ternary)所以你可以通過自動補全來發現它們。

 

我們選擇拆分這些不同的散點圖函數,因此每個散點圖函數都會接受一組定制的關鍵字參數,特別是它們的坐標系。也就是說,共享坐標系的函數集(例如 scatter, line & bar,或 scatter_polar, line_polar 和 bar_polar )也有相同的參數,以最大限度地方便學習。

 

我們還花了很多精力來提出簡短而富有表現力的名稱,這些名稱很好地映射到底層的 Plotly.py 屬性,以便於在工作流程中稍后調整到交互的圖表中。

 

最后,Plotly Express 作為一個新的 Python 可視化庫,在 Plotly 生態系統下,將會迅速發展。所以不要猶豫,立即開始使用 Plotly Express 吧!

 

公眾號后台對話框回復Plotly即可獲得源代碼。

 

文章來源:

https://medium.com/@plotlygraphs/introducing-plotly-express-808df010143d

 

參考文獻:

ref-1:

https://nbviewer.jupyter.org/github/plotly/plotly_express/blob/master/walkthrough.ipynb

ref-2:

https://mybinder.org/v2/gh/plotly/plotly_express/master?filepath=walkthrough.ipynb

ref-3:

https://plotly.github.io/plotly_express/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM