推薦:這纔是你尋尋覓覓想要的 Python 可視化神器

Plotly Express 是一個新的高級 Python 可視化庫:它是 Plotly.py 的高級封裝,它爲複雜的圖表提供了一個簡單的語法。 受 Seaborn 和 ggplot2 的啓發,它專門設計爲具備簡潔,一致且易於學習的 API :只需一次導入,您就能夠在一個函數調用中建立豐富的交互式繪圖,包括分面繪圖(faceting)、地圖、動畫和趨勢線。 它帶有數據集、顏色面板和主題,就像 Plotly.py 同樣。Plotly Express 徹底免費:憑藉其寬鬆的開源 MIT 許可證,您能夠隨意使用它(是的,甚至在商業產品中!)。 最重要的是,Plotly Express 與 Plotly 生態系統的其餘部分徹底兼容:在您的 Dash 應用程序中使用它,使用 Orca 將您的數據導出爲幾乎任何文件格式,或使用JupyterLab 圖表編輯器在 GUI 中編輯它們!python

pip install plotly_express 命令能夠安裝 Plotly Express。git

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

一旦導入Plotly Express(一般是 px ),大多數繪圖只須要一個函數調用,接受一個整潔的Pandas dataframe,並簡單描述你想要製做的圖。 若是你想要一個基本的散點圖,它只是px.scatter(data,x =「column_name」,y =「column_name」)github

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

import plotly_express as px

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

image01

若是你想經過大陸區分它們,你可使用 color 參數爲你的點着色,由 px 負責設置默認顏色,設置圖例等:框架

image02

這裏的每一點都是一個國家,因此也許咱們想要按國家人口來衡量這些點...... 沒問題:這裏也有一個參數來設置,它被稱爲 size編輯器

image03

若是你好奇哪一個國家對應哪一個點? 能夠添加一個 hover_name ,您能夠輕鬆識別任何一點:只需將鼠標放在您感興趣的點上便可! 事實上,即便沒有 hover_name ,整個圖表也是互動的:函數

image04

也能夠經過 facet_col =」continent「 來輕鬆劃分各大洲,就像着色點同樣容易,而且讓咱們使用 x軸 對數(log_x)以便在咱們在圖表中看的更清晰:工具

image06

也許你不只僅對 2007年 感興趣,並且你想看看這張圖表是如何隨着時間的推移而演變的。 能夠經過設置 animation_frame =「year」 (以及 animation_group =「country」 來標識哪些圓與控制條中的年份匹配)來設置動畫。 在這個最終版本中,讓咱們在這裏調整一些顯示,由於像「gdpPercap」 這樣的文本有點難看,即便它是咱們的數據框列的名稱。 咱們能夠提供更漂亮的「標籤」 (labels),能夠在整個圖表、圖例、標題軸和懸停(hovers)中應用。 咱們還能夠手動設置邊界,以便動畫在整個過程當中看起來更棒:學習

image07

由於這是地理數據,咱們也能夠將其表示爲動畫地圖,所以這清楚地代表 Plotly Express 不只僅能夠繪製散點圖(不過這個數據集缺乏前蘇聯的數據)。字體

image08

事實上,Plotly Express 支持三維散點圖、三維線形圖、極座標和地圖上三元座標以及二維座標。 條形圖(Bar)有二維笛卡爾和極座標風格。進行可視化時,您可使用單變量設置中的直方圖(histograms)和箱形圖(box)或小提琴圖(violin plots),或雙變量分佈的密度等高線圖(density contours)。 大多數二維笛卡爾圖接受連續或分類數據,並自動處理日期/時間數據。 能夠查看咱們的圖庫 (ref-3) 來了解每一個圖表的例子。

image09

上述動態圖包含 10多張 圖片的可視化,『Python數據之道』已將代碼整合到 jupyter notebook 文件中,在公號回覆 「code」 便可得到源代碼。

下圖便是其中的一個圖形:

image

可視化分佈

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

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

直方圖:

image10

箱形圖:

image11

小提琴圖:
image12

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

image13

顏色面板和序列

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

定性的顏色序列:

image14

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

image15

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

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

image16

散點圖矩陣(SPLOM)容許您可視化多個連接的散點圖:數據集中的每一個變量與其餘變量的關係。 數據集中的每一行都顯示爲每一個圖中的一個點。 你能夠進行縮放、平移或選擇操做,你會發現全部圖都連接在一塊兒!

image17

平行座標容許您同時顯示3個以上的連續變量。 dataframe 中的每一行都是一行。 您能夠拖動尺寸以從新排序它們並選擇值範圍之間的交叉點。

image18

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

Plotly 生態系統的一部分

Plotly Express 之於 Plotly.py 相似 Seaborn 之於 matplotlib:Plotly Express 是一個高級封裝庫,容許您快速建立圖表,而後使用底層 API 和生態系統的強大功能進行修改。 對於Plotly 生態系統,這意味着一旦您使用 Plotly Express 建立了一個圖形,您就可使用Themes,使用 FigureWidgets 進行命令性編輯,使用 Orca 將其導出爲幾乎任何文件格式,或者在咱們的 GUI JupyterLab 圖表編輯器中編輯它 。

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

image19

有三個內置的 Plotly 主題可使用, 分別是 plotly, plotly_white 和 plotly_dark

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

image20

在這裏,在使用 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 生成其中的圖表:

image

這個 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_sequencecolor_continuous_scale (和其餘 * _sequence 參數)。

在 API 級別,咱們在 px 中投入了大量的工做,以確保全部參數都被命名,以便在鍵入時最大限度地發現:全部 scatter -相似的函數都以 scatter 開頭(例如 scatter_polarscatter_ternary)因此你能夠經過自動補全來發現它們。 咱們選擇拆分這些不一樣的散點圖函數,所以每一個散點圖函數都會接受一組定製的關鍵字參數,特別是它們的座標系。 也就是說,共享座標系的函數集(例如 scatterlinebar,或 scatter_polarline_polarbar_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/

相關文章
相關標籤/搜索