翻譯 | Lemon
來(lái)源 | Plotly
譯文出品 | Python數(shù)據(jù)之道 (ID:PyDataRoad)
Plotly Express 是一個(gè)新的高級(jí) Python 可視化庫(kù):它是 Plotly.py 的高級(jí)封裝,它為復(fù)雜的圖表提供了一個(gè)簡(jiǎn)單的語(yǔ)法。 受 Seaborn 和 ggplot2 的啟發(fā)英上,它專門(mén)設(shè)計(jì)為具有簡(jiǎn)潔嗤锉,一致且易于學(xué)習(xí)的 API :只需一次導(dǎo)入碉克,您就可以在一個(gè)函數(shù)調(diào)用中創(chuàng)建豐富的交互式繪圖掰派,包括分面繪圖(faceting)、地圖、動(dòng)畫(huà)和趨勢(shì)線丹喻。 它帶有數(shù)據(jù)集、顏色面板和主題翁都,就像 Plotly.py 一樣碍论。Plotly Express 完全免費(fèi):憑借其寬松的開(kāi)源 MIT 許可證,您可以隨意使用它(是的荐吵,甚至在商業(yè)產(chǎn)品中F锶摺)。 最重要的是先煎,Plotly Express 與 Plotly 生態(tài)系統(tǒng)的其他部分完全兼容:在您的 Dash 應(yīng)用程序中使用它贼涩,使用 Orca 將您的數(shù)據(jù)導(dǎo)出為幾乎任何文件格式,或使用JupyterLab 圖表編輯器在 GUI 中編輯它們薯蝎!
用 pip install plotly_express
命令可以安裝 Plotly Express遥倦。
使用 Plotly Express 輕松地進(jìn)行數(shù)據(jù)可視化
一旦導(dǎo)入Plotly Express(通常是 px
),大多數(shù)繪圖只需要一個(gè)函數(shù)調(diào)用,接受一個(gè)整潔的Pandas dataframe袒哥,并簡(jiǎn)單描述你想要制作的圖缩筛。 如果你想要一個(gè)基本的散點(diǎn)圖,它只是px.scatter(data堡称,x =“column_name”瞎抛,y =“column_name”)
。
以下是 內(nèi)置的 Gapminder 數(shù)據(jù)集 的示例却紧,顯示2007年按國(guó)家/地區(qū)的人均預(yù)期壽命和人均GDP 之間的趨勢(shì):
import plotly_express as px
gapminder = px.data.gapminder()
gapminder2007 = gapminder.query('year == 2007')
px.scatter(gapminder2007, x='gdpPercap', y='lifeExp')
如果你想通過(guò)大陸區(qū)分它們桐臊,你可以使用 color
參數(shù)為你的點(diǎn)著色,由 px
負(fù)責(zé)設(shè)置默認(rèn)顏色晓殊,設(shè)置圖例等:
這里的每一點(diǎn)都是一個(gè)國(guó)家断凶,所以也許我們想要按國(guó)家人口來(lái)衡量這些點(diǎn)...... 沒(méi)問(wèn)題:這里也有一個(gè)參數(shù)來(lái)設(shè)置,它被稱為 size
:
如果你好奇哪個(gè)國(guó)家對(duì)應(yīng)哪個(gè)點(diǎn)巫俺? 可以添加一個(gè) hover_name
认烁,您可以輕松識(shí)別任何一點(diǎn):只需將鼠標(biāo)放在您感興趣的點(diǎn)上即可! 事實(shí)上介汹,即使沒(méi)有 hover_name
却嗡,整個(gè)圖表也是互動(dòng)的:
也可以通過(guò) facet_col =”continent“
來(lái)輕松劃分各大洲,就像著色點(diǎn)一樣容易痴昧,并且讓我們使用 x軸 對(duì)數(shù)(log_x)以便在我們?cè)趫D表中看的更清晰:
也許你不僅僅對(duì) 2007年 感興趣稽穆,而且你想看看這張圖表是如何隨著時(shí)間的推移而演變的冠王。 可以通過(guò)設(shè)置 animation_frame =“year”
(以及 animation_group =“country”
來(lái)標(biāo)識(shí)哪些圓與控制條中的年份匹配)來(lái)設(shè)置動(dòng)畫(huà)赶撰。 在這個(gè)最終版本中,讓我們?cè)谶@里調(diào)整一些顯示柱彻,因?yàn)橄瘛癵dpPercap” 這樣的文本有點(diǎn)難看豪娜,即使它是我們的數(shù)據(jù)框列的名稱。 我們可以提供更漂亮的“標(biāo)簽” (labels)哟楷,可以在整個(gè)圖表瘤载、圖例、標(biāo)題軸和懸停(hovers)中應(yīng)用卖擅。 我們還可以手動(dòng)設(shè)置邊界鸣奔,以便動(dòng)畫(huà)在整個(gè)過(guò)程中看起來(lái)更棒:
因?yàn)檫@是地理數(shù)據(jù),我們也可以將其表示為動(dòng)畫(huà)地圖惩阶,因此這清楚地表明 Plotly Express 不僅僅可以繪制散點(diǎn)圖(不過(guò)這個(gè)數(shù)據(jù)集缺少前蘇聯(lián)的數(shù)據(jù))挎狸。
事實(shí)上,Plotly Express 支持三維散點(diǎn)圖断楷、三維線形圖锨匆、極坐標(biāo)和地圖上三元坐標(biāo)以及二維坐標(biāo)。 條形圖(Bar)有二維笛卡爾和極坐標(biāo)風(fēng)格冬筒。進(jìn)行可視化時(shí)恐锣,您可以使用單變量設(shè)置中的直方圖(histograms)和箱形圖(box)或小提琴圖(violin plots)茅主,或雙變量分布的密度等高線圖(density contours)。 大多數(shù)二維笛卡爾圖接受連續(xù)或分類數(shù)據(jù)土榴,并自動(dòng)處理日期/時(shí)間數(shù)據(jù)诀姚。 可以查看我們的圖庫(kù) (ref-3) 來(lái)了解每個(gè)圖表的例子。
上述動(dòng)態(tài)圖包含 10多張 圖片的可視化玷禽,『Python數(shù)據(jù)之道』已將代碼整合到 jupyter notebook 文件中学搜,在公號(hào)回復(fù) “code” 即可獲得源代碼。
下圖即是其中的一個(gè)圖形:
可視化分布
數(shù)據(jù)探索的主要部分是理解數(shù)據(jù)集中值的分布论衍,以及這些分布如何相互關(guān)聯(lián)瑞佩。 Plotly Express 有許多功能來(lái)處理這些任務(wù)。
使用直方圖(histograms)坯台,箱形圖(box)或小提琴圖(violin plots)可視化單變量分布:
直方圖:
箱形圖:
小提琴圖:
還可以創(chuàng)建聯(lián)合分布圖(marginal rugs)炬丸,使用直方圖,箱形圖(box)或小提琴來(lái)顯示雙變量分布蜒蕾,也可以添加趨勢(shì)線稠炬。 Plotly Express 甚至可以幫助你在懸停框中添加線條公式和R2值咪啡! 它使用 statsmodels 進(jìn)行普通最小二乘(OLS)回歸或局部加權(quán)散點(diǎn)圖平滑(LOWESS)首启。
顏色面板和序列
在上面的一些圖中你會(huì)注意到一些不錯(cuò)的色標(biāo)。 在 Plotly Express 中撤摸, px.colors 模塊包含許多有用的色標(biāo)和序列:定性的毅桃、序列型的、離散的准夷、循環(huán)的以及所有您喜歡的開(kāi)源包:ColorBrewer钥飞、cmocean 和 Carto 。 我們還提供了一些功能來(lái)制作可瀏覽的樣本供您欣賞(ref-3):
定性的顏色序列:
眾多內(nèi)置順序色標(biāo)中的一部分:
用一行 Python 代碼進(jìn)行交互式多維可視化
我們特別為我們的交互式多維圖表感到自豪衫嵌,例如散點(diǎn)圖矩陣(SPLOMS)读宙、平行坐標(biāo)和我們稱之為并行類別的并行集。 通過(guò)這些楔绞,您可以在單個(gè)圖中可視化整個(gè)數(shù)據(jù)集以進(jìn)行數(shù)據(jù)探索结闸。 在你的Jupyter 筆記本中查看這些單行及其啟用的交互:
散點(diǎn)圖矩陣(SPLOM)允許您可視化多個(gè)鏈接的散點(diǎn)圖:數(shù)據(jù)集中的每個(gè)變量與其他變量的關(guān)系。 數(shù)據(jù)集中的每一行都顯示為每個(gè)圖中的一個(gè)點(diǎn)酒朵。 你可以進(jìn)行縮放桦锄、平移或選擇操作,你會(huì)發(fā)現(xiàn)所有圖都鏈接在一起耻讽!
平行坐標(biāo)允許您同時(shí)顯示3個(gè)以上的連續(xù)變量察纯。 dataframe 中的每一行都是一行。 您可以拖動(dòng)尺寸以重新排序它們并選擇值范圍之間的交叉點(diǎn)。
并行類別是并行坐標(biāo)的分類模擬:使用它們可視化數(shù)據(jù)集中多組類別之間的關(guān)系饼记。
Plotly 生態(tài)系統(tǒng)的一部分
Plotly Express 之于 Plotly.py 類似 Seaborn 之于 matplotlib:Plotly Express 是一個(gè)高級(jí)封裝庫(kù)香伴,允許您快速創(chuàng)建圖表,然后使用底層 API 和生態(tài)系統(tǒng)的強(qiáng)大功能進(jìn)行修改具则。 對(duì)于Plotly 生態(tài)系統(tǒng)即纲,這意味著一旦您使用 Plotly Express 創(chuàng)建了一個(gè)圖形,您就可以使用Themes博肋,使用 FigureWidgets 進(jìn)行命令性編輯低斋,使用 Orca 將其導(dǎo)出為幾乎任何文件格式,或者在我們的 GUI JupyterLab 圖表編輯器中編輯它 匪凡。
主題(Themes)允許您控制圖形范圍的設(shè)置膊畴,如邊距、字體病游、背景顏色唇跨、刻度定位等。 您可以使用模板參數(shù)應(yīng)用任何命名的主題或主題對(duì)象:
有三個(gè)內(nèi)置的 Plotly 主題可以使用衬衬, 分別是 plotly买猖, plotly_white 和 plotly_dark
px
輸出繼承自 Plotly.py 的 Figure
類 ExpressFigure
的對(duì)象,這意味著你可以使用任何 Figure
的訪問(wèn)器和方法來(lái)改變 px
生成的繪圖滋尉。 例如玉控,您可以將 .update()
調(diào)用鏈接到 px
調(diào)用以更改圖例設(shè)置并添加注釋。 .update()
現(xiàn)在返回修改后的數(shù)字狮惜,所以你仍然可以在一個(gè)很長(zhǎng)的 Python 語(yǔ)句中執(zhí)行此操作:
在這里高诺,在使用 Plotly Express 生成原始圖形之后,我們使用 Plotly.py 的 API 來(lái)更改一些圖例設(shè)置并添加注釋讽挟。
能夠與 Dash 完美匹配
Dash 是 Plotly 的開(kāi)源框架懒叛,用于構(gòu)建具有 Plotly.py 圖表的分析應(yīng)用程序和儀表板。Plotly Express 產(chǎn)生的對(duì)象與 Dash 100%兼容耽梅,只需將它們直接傳遞到dash_core_components.Graph
,如下所示:dcc.Graph(figure = px.scatter(...))
胖烛。 這是一個(gè)非常簡(jiǎn)單的 50行 Dash 應(yīng)用程序的示例眼姐,它使用 px
生成其中的圖表:
這個(gè) 50 行的 Dash 應(yīng)用程序使用 Plotly Express 生成用于瀏覽數(shù)據(jù)集的 UI 。
設(shè)計(jì)理念:為什么我們創(chuàng)建 Plotly Express 佩番?
可視化數(shù)據(jù)有很多原因:有時(shí)您想要提供一些想法或結(jié)果众旗,并且您希望對(duì)圖表的每個(gè)方面施加很多控制,有時(shí)您希望快速查看兩個(gè)變量之間的關(guān)系趟畏。 這是交互與探索的范疇贡歧。
Plotly.py 已經(jīng)發(fā)展成為一個(gè)非常強(qiáng)大的可視化交互工具:它可以讓你控制圖形的幾乎每個(gè)方面,從圖例的位置到刻度的長(zhǎng)度。 不幸的是利朵,這種控制的代價(jià)是冗長(zhǎng)的:有時(shí)可能需要多行 Python 代碼才能用 Plotly.py 生成圖表律想。
我們使用 Plotly Express 的主要目標(biāo)是使 Plotly.py 更容易用于探索和快速迭代。
我們想要構(gòu)建一個(gè)庫(kù)绍弟,它做出了不同的權(quán)衡:在可視化過(guò)程的早期犧牲一些控制措施來(lái)?yè)Q取一個(gè)不那么詳細(xì)的 API技即,允許你在一行 Python 代碼中制作各種各樣的圖表。 然而樟遣,正如我們上面所示而叼,該控件并沒(méi)有消失:你仍然可以使用底層的 Plotly.py 的 API 來(lái)調(diào)整和優(yōu)化用 Plotly Express 制作的圖表。
支持這種簡(jiǎn)潔 API 的主要設(shè)計(jì)決策之一是所有 Plotly Express 的函數(shù)都接受“整潔”的 dataframe 作為輸入豹悬。 每個(gè) Plotly Express 函數(shù)都體現(xiàn)了dataframe 中行與單個(gè)或分組標(biāo)記的清晰映射葵陵,并具有圖形啟發(fā)的語(yǔ)法簽名,可讓您直接映射這些標(biāo)記的變量瞻佛,如 x 或 y 位置埃难、顏色、大小涤久、 facet-column 甚至是 動(dòng)畫(huà)幀到數(shù)據(jù)框(dataframe)中的列涡尘。 當(dāng)您鍵入px.scatter(data,x ='col1'响迂,y ='col2')
時(shí)考抄,Plotly Express 會(huì)為數(shù)據(jù)框中的每一行創(chuàng)建一個(gè)小符號(hào)標(biāo)記 - 這就是 px.scatter
的作用 - 并將 “col1” 映射到 x 位置(類似于 y 位置)。 這種方法的強(qiáng)大之處在于它以相同的方式處理所有可視化變量:您可以將數(shù)據(jù)框列映射到顏色蔗彤,然后通過(guò)更改參數(shù)來(lái)改變您的想法并將其映射到大小或進(jìn)行行分面(facet-row)川梅。
接受整個(gè)整潔的 dataframe 的列名作為輸入(而不是原始的 numpy
向量)也允許 px
為你節(jié)省大量的時(shí)間,因?yàn)樗懒械拿Q然遏,它可以生成所有的 Plotly.py 配置用于標(biāo)記圖例贫途、軸、懸痛郑框丢早、構(gòu)面甚至動(dòng)畫(huà)幀。 但是秧倾,如上所述怨酝,如果你的 dataframe 的列被笨拙地命名,你可以告訴 px
用每個(gè)函數(shù)的 labels
參數(shù)替換更好的那先。
僅接受整潔輸入所帶來(lái)的最終優(yōu)勢(shì)是它更直接地支持快速迭代:您整理一次數(shù)據(jù)集农猬,從那里可以使用 px
創(chuàng)建數(shù)十種不同類型的圖表,包括在 SPLOM 中可視化多個(gè)維度 售淡、使用平行坐標(biāo)斤葱、在地圖上繪制慷垮,在二維、三維極坐標(biāo)或三維坐標(biāo)中使用等揍堕,所有這些都不需要重塑您的數(shù)據(jù)料身!
我們沒(méi)有以權(quán)宜之計(jì)的名義犧牲控制的所有方面,我們只關(guān)注您想要在數(shù)據(jù)可視化過(guò)程的探索階段發(fā)揮的控制類型鹤啡。 您可以對(duì)大多數(shù)函數(shù)使用 category_orders
參數(shù)來(lái)告訴 px
您的分類數(shù)據(jù)“好”惯驼、“更好”、“最佳” 等具有重要的非字母順序递瑰,并且它將用于分類軸祟牲、分面繪制 和圖例的排序。 您可以使用 color_discrete_map
(以及其他 * _map
參數(shù))將特定顏色固定到特定數(shù)據(jù)值(如果這對(duì)您的示例有意義)抖部。 當(dāng)然说贝,你可以在任何地方重構(gòu) color_discrete_sequence
或 color_continuous_scale
(和其他 * _sequence
參數(shù))。
在 API 級(jí)別慎颗,我們?cè)?px
中投入了大量的工作乡恕,以確保所有參數(shù)都被命名,以便在鍵入時(shí)最大限度地發(fā)現(xiàn):所有 scatter
-類似的函數(shù)都以 scatter
開(kāi)頭(例如 scatter_polar
俯萎,scatter_ternary
)所以你可以通過(guò)自動(dòng)補(bǔ)全來(lái)發(fā)現(xiàn)它們傲宜。 我們選擇拆分這些不同的散點(diǎn)圖函數(shù),因此每個(gè)散點(diǎn)圖函數(shù)都會(huì)接受一組定制的關(guān)鍵字參數(shù)夫啊,特別是它們的坐標(biāo)系函卒。 也就是說(shuō),共享坐標(biāo)系的函數(shù)集(例如 scatter
撇眯,line
& bar
报嵌,或 scatter_polar
, line_polar
和 bar_polar
)也有相同的參數(shù)熊榛,以最大限度地方便學(xué)習(xí)锚国。 我們還花了很多精力來(lái)提出簡(jiǎn)短而富有表現(xiàn)力的名稱,這些名稱很好地映射到底層的 Plotly.py 屬性玄坦,以便于在工作流程中稍后調(diào)整到交互的圖表中血筑。
最后,Plotly Express 作為一個(gè)新的 Python 可視化庫(kù)营搅,在 Plotly 生態(tài)系統(tǒng)下云挟,將會(huì)迅速發(fā)展。所以不要猶豫转质,立即開(kāi)始使用 Plotly Express 吧!
『Python數(shù)據(jù)之道』已將代碼整合到 jupyter notebook 文件中帖世,在公號(hào)回復(fù) “code” 即可獲得源代碼休蟹。
文章來(lái)源:
https://medium.com/@plotlygraphs/introducing-plotly-express-808df010143d
參考文獻(xiàn):
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