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

翻譯 | 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')
image01

如果你想通過(guò)大陸區(qū)分它們桐臊,你可以使用 color 參數(shù)為你的點(diǎn)著色,由 px 負(fù)責(zé)設(shè)置默認(rèn)顏色晓殊,設(shè)置圖例等:

image02

這里的每一點(diǎn)都是一個(gè)國(guó)家断凶,所以也許我們想要按國(guó)家人口來(lái)衡量這些點(diǎn)...... 沒(méi)問(wèn)題:這里也有一個(gè)參數(shù)來(lái)設(shè)置,它被稱為 size

image03

如果你好奇哪個(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)的:

image04

也可以通過(guò) facet_col =”continent“ 來(lái)輕松劃分各大洲,就像著色點(diǎn)一樣容易痴昧,并且讓我們使用 x軸 對(duì)數(shù)(log_x)以便在我們?cè)趫D表中看的更清晰:

image06

也許你不僅僅對(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)更棒:

image07

因?yàn)檫@是地理數(shù)據(jù),我們也可以將其表示為動(dòng)畫(huà)地圖惩阶,因此這清楚地表明 Plotly Express 不僅僅可以繪制散點(diǎn)圖(不過(guò)這個(gè)數(shù)據(jù)集缺少前蘇聯(lián)的數(shù)據(jù))挎狸。

image08

事實(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è)圖表的例子。

image09

上述動(dòng)態(tài)圖包含 10多張 圖片的可視化玷禽,『Python數(shù)據(jù)之道』已將代碼整合到 jupyter notebook 文件中学搜,在公號(hào)回復(fù) “code” 即可獲得源代碼。

下圖即是其中的一個(gè)圖形:

image

可視化分布

數(shù)據(jù)探索的主要部分是理解數(shù)據(jù)集中值的分布论衍,以及這些分布如何相互關(guān)聯(lián)瑞佩。 Plotly Express 有許多功能來(lái)處理這些任務(wù)。

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

直方圖:

image10

箱形圖:

image11

小提琴圖:


image12

還可以創(chuàng)建聯(lián)合分布圖(marginal rugs)炬丸,使用直方圖,箱形圖(box)或小提琴來(lái)顯示雙變量分布蜒蕾,也可以添加趨勢(shì)線稠炬。 Plotly Express 甚至可以幫助你在懸停框中添加線條公式和R2值咪啡! 它使用 statsmodels 進(jìn)行普通最小二乘(OLS)回歸或局部加權(quán)散點(diǎn)圖平滑(LOWESS)首启。

image13

顏色面板和序列

在上面的一些圖中你會(huì)注意到一些不錯(cuò)的色標(biāo)。 在 Plotly Express 中撤摸, px.colors 模塊包含許多有用的色標(biāo)和序列:定性的毅桃、序列型的、離散的准夷、循環(huán)的以及所有您喜歡的開(kāi)源包:ColorBrewer钥飞、cmocean 和 Carto 。 我們還提供了一些功能來(lái)制作可瀏覽的樣本供您欣賞(ref-3):

定性的顏色序列:

image14

眾多內(nèi)置順序色標(biāo)中的一部分:

image15

用一行 Python 代碼進(jìn)行交互式多維可視化

我們特別為我們的交互式多維圖表感到自豪衫嵌,例如散點(diǎn)圖矩陣(SPLOMS)读宙、平行坐標(biāo)和我們稱之為并行類別的并行集。 通過(guò)這些楔绞,您可以在單個(gè)圖中可視化整個(gè)數(shù)據(jù)集以進(jìn)行數(shù)據(jù)探索结闸。 在你的Jupyter 筆記本中查看這些單行及其啟用的交互:

image16

散點(diǎn)圖矩陣(SPLOM)允許您可視化多個(gè)鏈接的散點(diǎn)圖:數(shù)據(jù)集中的每個(gè)變量與其他變量的關(guān)系。 數(shù)據(jù)集中的每一行都顯示為每個(gè)圖中的一個(gè)點(diǎn)酒朵。 你可以進(jìn)行縮放桦锄、平移或選擇操作,你會(huì)發(fā)現(xiàn)所有圖都鏈接在一起耻讽!

image17

平行坐標(biāo)允許您同時(shí)顯示3個(gè)以上的連續(xù)變量察纯。 dataframe 中的每一行都是一行。 您可以拖動(dòng)尺寸以重新排序它們并選擇值范圍之間的交叉點(diǎn)。

image18

并行類別是并行坐標(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ì)象:

image19

有三個(gè)內(nèi)置的 Plotly 主題可以使用衬衬, 分別是 plotly买猖, plotly_white 和 plotly_dark

px 輸出繼承自 Plotly.py 的 FigureExpressFigure 的對(duì)象,這意味著你可以使用任何 Figure 的訪問(wèn)器和方法來(lái)改變 px 生成的繪圖滋尉。 例如玉控,您可以將 .update() 調(diào)用鏈接到 px 調(diào)用以更改圖例設(shè)置并添加注釋。 .update() 現(xiàn)在返回修改后的數(shù)字狮惜,所以你仍然可以在一個(gè)很長(zhǎng)的 Python 語(yǔ)句中執(zhí)行此操作:

image20

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

image

這個(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_sequencecolor_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撇眯,linebar报嵌,或 scatter_polarline_polarbar_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

ref-3:https://plotly.github.io/plotly_express/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末沸枯,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子赂弓,更是在濱河造成了極大的恐慌绑榴,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盈魁,死亡現(xiàn)場(chǎng)離奇詭異翔怎,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)杨耙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)赤套,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人珊膜,你說(shuō)我怎么就攤上這事容握。” “怎么了车柠?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵剔氏,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我竹祷,道長(zhǎng)谈跛,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任塑陵,我火速辦了婚禮感憾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘猿妈。我一直安慰自己吹菱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布彭则。 她就那樣靜靜地躺著鳍刷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪俯抖。 梳的紋絲不亂的頭發(fā)上输瓜,一...
    開(kāi)封第一講書(shū)人閱讀 49,079評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音芬萍,去河邊找鬼尤揣。 笑死,一個(gè)胖子當(dāng)著我的面吹牛柬祠,可吹牛的內(nèi)容都是我干的北戏。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼漫蛔,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼嗜愈!你這毒婦竟也來(lái)了旧蛾?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蠕嫁,失蹤者是張志新(化名)和其女友劉穎锨天,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體剃毒,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡病袄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赘阀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片益缠。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖纤壁,靈堂內(nèi)的尸體忽然破棺而出左刽,到底是詐尸還是另有隱情,我是刑警寧澤酌媒,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布欠痴,位于F島的核電站,受9級(jí)特大地震影響秒咨,放射性物質(zhì)發(fā)生泄漏喇辽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一雨席、第九天 我趴在偏房一處隱蔽的房頂上張望菩咨。 院中可真熱鬧牌借,春花似錦廊移、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)云茸。三九已至,卻和暖如春谤饭,著一層夾襖步出監(jiān)牢的瞬間标捺,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工揉抵, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留亡容,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓冤今,卻偏偏與公主長(zhǎng)得像闺兢,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子戏罢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容