翻譯 | Lemon 來源 | Plotly
譯文出品 | Python資料之道 (ID:PyDataRoad)
Plotly Express 入門之路
Plotly Express 是一個新的高階 Python 視覺化庫:它是 Plotly.py 的高階封裝,它為複雜的圖表提供了一個簡單的語法。
受 Seaborn 和 ggplot2 的啟發,它專門設計為具有簡潔,一致且易於學習的 API :只需一次匯入,您就可以在一個函式呼叫中建立豐富的互動式繪圖,包括分面繪圖(faceting)、地圖、動畫和趨勢線。 它帶有資料集、顏色面板和主題,就像 Plotly.py 一樣。
Plotly Express 完全免費:憑藉其寬鬆的開源 MIT 許可證,您可以隨意使用它(是的,甚至在商業產品中!)。
最重要的是,Plotly Express 與 Plotly 生態系統的其他部分完全相容:在您的 Dash 應用程式中使用它,使用 Orca 將您的資料匯出為幾乎任何檔案格式,或使用JupyterLab 圖表編輯器在 GUI 中編輯它們!
用 pip install plotly_express
命令可以安裝 Plotly Express。
使用 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多張 圖片的視覺化,『Python資料之道』已將程式碼整合到 jupyter notebook 檔案中,原始碼 https://github.com/liyangbit/PyDataRoad
視覺化分佈
資料探索的主要部分是理解資料集中值的分佈,以及這些分佈如何相互關聯。 Plotly Express 有許多功能來處理這些任務。
使用直方圖(histograms),箱形圖(box)或小提琴圖(violin plots)視覺化單變數分佈:
直方圖:
箱形圖:
小提琴圖:
還可以建立聯合分佈圖(marginal rugs),使用直方圖,箱形圖(box)或小提琴來顯示雙變數分佈,也可以新增趨勢線。 Plotly Express 甚至可以幫助你在懸停框中新增線條公式和R²值! 它使用 statsmodels 進行普通最小二乘(OLS)回歸或區域性加權散點圖平滑(LOWESS)。
顏色面板和序列
在上面的一些圖中你會註意到一些不錯的色標。 在 Plotly Express 中, px.colors 模組包含許多有用的色標和序列:定性的、序列型的、離散的、迴圈的以及所有您喜歡的開源包:ColorBrewer、cmocean 和 Carto 。 我們還提供了一些功能來製作可瀏覽的樣本供您欣賞(ref-3):
定性的顏色序列:
眾多內建順序色標中的一部分:
用一行 Python 程式碼進行互動式多維視覺化
我們特別為我們的互動式多維圖表感到自豪,例如散點圖矩陣(SPLOMS)、平行坐標和我們稱之為並行類別的並行集。 透過這些,您可以在單個圖中視覺化整個資料集以進行資料探索。 在你的Jupyter 筆記本中檢視這些單行及其啟用的互動:
散點圖矩陣(SPLOM)允許您視覺化多個連結的散點圖:資料集中的每個變數與其他變數的關係。 資料集中的每一行都顯示為每個圖中的一個點。 你可以進行縮放、平移或選擇操作,你會發現所有圖都連結在一起!
平行坐標允許您同時顯示3個以上的連續變數。 dataframe 中的每一行都是一行。 您可以拖動尺寸以重新排序它們並選擇值範圍之間的交叉點。
並行類別是並行坐標的分類模擬:使用它們視覺化資料集中多組類別之間的關係。
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 來更改一些圖例設定並新增註釋。
能夠與 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 。
設計理念:為什麼我們建立 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 吧!
『Python資料之道』已將程式碼整合到 jupyter notebook 檔案中,在公號回覆 “code” 即可獲得原始碼。
文章來源:
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/