plotly 4.0自來水公司通告(可視化python模塊推薦)

序言

雖然上次寫了一個(gè)plotly繪圖說明的一篇文章,向大家介紹了一下plotly這個(gè)很好用的python的畫交互式圖/網(wǎng)頁的庫灌具,但時(shí)代畢竟在變化割捅,最近在我再次上plotly的官網(wǎng)準(zhǔn)備查看官方文檔的時(shí)候恩掷,竟然驚喜的發(fā)現(xiàn),plotly竟然在不知不覺中升級到了4.0的版本树灶,要知道纤怒,版本號的更迭都有其意義,像這種最大位數(shù)上的數(shù)字的變化天通,絕對是很大的一次調(diào)整泊窘。

所以作為一個(gè)plotly的attributor之一,我今天就來吹一波plotly的更新!烘豹!

正文

首先一上來的最大的改變自然是在python部分的plotly的首頁

相比于之前的首頁對不起這里找不到之前的首頁瓜贾,最顯眼的自然就是Version 4 migration Guide。其實(shí)其實(shí)還有一個(gè)不是很顯眼携悯,但是其實(shí)后來發(fā)現(xiàn)十分十分重要的一個(gè)模塊的增加祭芦,也就是plotly Express,這個(gè)模塊后面會(huì)重點(diǎn)講到劃重點(diǎn)了劃重點(diǎn)了憔鬼。

我們可以點(diǎn)進(jìn)去Version 4 migration Guide里面龟劲,我們就可以知道一些比較重大的變化/遷移(mirgration)

所以在這里也可以毫不猶豫的說一聲

plotly 4.0 重點(diǎn)就是在于改變了一些原來3.X版本下的冗余逊彭,算是大刀闊斧的砍掉了一些模塊了

遷移

online版的plotly遷移到了chart-studio

不知道有沒有讀者在用plotly的online版的咸灿,反正我其實(shí)是沒有用的,一方面是經(jīng)常要處理的數(shù)據(jù)很大(我們單位網(wǎng)速又很抓馬)侮叮,另外一方面有時(shí)不付費(fèi)的話只能使用非常有限的儲(chǔ)存空間。而且再再加上我更喜歡寫代碼而不是交互式點(diǎn)擊的方式去畫圖悼瘾,所以online版跟我始終無緣囊榜。

但正如我上一篇里面提到的,plotly是一個(gè)跨平臺的可以兼容多種語言的工具庫亥宿,所以online版也無可厚非卸勺,一個(gè)愿打一個(gè)愿挨嘛,商品經(jīng)濟(jì)烫扼。
但是J锴蟆!映企!我每次使用import plotly的時(shí)候真的很煩悟狱。。堰氓。為什么呢挤渐?

就是plotly的default選項(xiàng)是使用online版,所以如果你要使用offline的輸出一些圖片或者網(wǎng)頁的話双絮,要再加一層浴麻,也就是plotly.offline.plot。當(dāng)然這也僅僅是加多幾個(gè)字的原因囤攀,所以我也一直這么使用软免,但是plotly公司會(huì)考慮到這一點(diǎn),然后把plotly這個(gè)名號全部讓給了離線版焚挠,然后把online版的代碼遷移到了chart-studio中去膏萧,真的就很大方以及很慷慨。這里再尬吹一波plotly的抉擇,這樣子想必會(huì)有更多的開源代碼工作者愿意使用plotly作為自己的畫圖工具向抢,從而達(dá)到提高知名度的效果认境!

offline版的遷移

網(wǎng)頁中時(shí)這么說的Offline features (plotly.offline) replaced by Renderers framework & HTML export
其實(shí)有點(diǎn)令人看不懂,但大概的意思應(yīng)該是拋棄了這個(gè)模塊(雖然近幾個(gè)版本以內(nèi)應(yīng)該還在)挟鸠,然后把輸出圖片或者網(wǎng)頁的方法直接用figure這個(gè)實(shí)例的方法來代替叉信,也就是figure.to_htmlfigure.write_html

這個(gè)也大大提高了使用時(shí)候的便捷艘希,不用再麻煩的從plotly.ioimport一個(gè)write_images來輸出圖片了硼身。

不過值得吐槽的是,通過orca的服務(wù)端來做網(wǎng)頁到pdf的渲染覆享,還是有些不穩(wěn)定佳遂。但重新打開一下orca的服務(wù)器端就好了,所以也不算個(gè)大問題撒顿,所以一直也沒有被解決丑罪。 orca的介紹在這里

plotly.tools.make_subplots遷移到plotly.subplots.make_subplots

新增了很多plotly的配色主題

新模塊plotly-Express

終于到了介紹這個(gè)全新的模塊的時(shí)候了!凤壁!這個(gè)也是我這次更新里很喜歡的一個(gè)語法糖 語法糖:特指沒有什么實(shí)質(zhì)作用吩屹,但會(huì)大幅度提高書寫的或者使用的便捷度的語法谐鼎。

首先開頭介紹一些這是個(gè)什么袭灯,簡單的說,

plotly-Express就是通過簡單的一個(gè)function替使用者便捷的畫圖的模塊

同樣功能的模塊在別的繪圖庫中也非常的多凡伊,例如R中著名的ggplot唧席,或者說python中matplotlib的著名高級庫seaborn擦盾。(要是很多人沒聽過,質(zhì)疑這幾個(gè)著名淌哟,本作者概不負(fù)責(zé))

以下可以介紹幾個(gè)例子(例子都是出自于plotly-Express的例子迹卢,這里我只是個(gè)搬運(yùn)工和解讀的角色)

自動(dòng)化散點(diǎn)圖的顏色

import plotly.express as px
iris = px.data.iris()
fig = px.scatter(iris, x="sepal_width", y="sepal_length", color="species")
fig.show()

這里導(dǎo)入了一個(gè)著名的數(shù)據(jù)集(鳶尾花),然后通過plotly.express绞绒,也就是我這次要講到的plotly-express進(jìn)行繪圖婶希。通過給定一個(gè)dataframe,然后通過指定列名就可以讓該function自動(dòng)幫助你進(jìn)行繪圖蓬衡。

其中通過給color指定列名喻杈,就可以讓plotly自動(dòng)的根據(jù)該列的值,進(jìn)行離散化的賦予顏色和組別狰晚。如果是原來的寫法筒饰,就得按照下面這么寫。

import plotly.graph_objects as go
fig = go.Figure()
for group in set(iris.loc[:,"species"]):
    sub_df = iris.loc[iris.loc[:,"species"==group],:]
    fig.add_scatter(x=sub_df.loc[:,"sepal_width"], y=sub_df.loc[:,"sepal_length"], name = group)
plotly.offline.iplot(fig)

并且壁晒,如果要指定顏色瓷们,還得自己辛苦的在循環(huán)中手動(dòng)的去賦值,就很麻煩。但是現(xiàn)在的方法就簡單了不少谬晕。

當(dāng)然也帶來了一些麻煩(畢竟麻煩和便利總是形影相隨的)碘裕,例如如果你的species的列是連續(xù)值,但它其實(shí)是離散的類別變量攒钳,那么首先你得手動(dòng)的把該列轉(zhuǎn)換為字符串帮孔。而不是整數(shù)/浮點(diǎn)數(shù)。

自動(dòng)化散點(diǎn)圖的左右常用子圖

上面的例子其實(shí)也沒有簡化太多不撑,但是這個(gè)例子就簡單了很多文兢。而且似乎也很經(jīng)常需要畫類似的圖。

import plotly.express as px
iris = px.data.iris()
fig = px.scatter(iris, x="sepal_width", y="sepal_length", color="species", marginal_y="violin",
           marginal_x="box", trendline="ols")
fig.show()

同樣地焕檬,這里用的是鳶尾花的數(shù)據(jù)集姆坚。除了再次自動(dòng)賦予color以外,例子中還有兩個(gè)特別的參數(shù)marginal_xmarginal_y实愚。而且傳遞給它們的值也很奇怪兼呵,任何一個(gè)都不屬于鳶尾花數(shù)據(jù)集中的列名,讓我們先看看效果吧爆侣。

效果如上萍程,就是一個(gè)經(jīng)常使用的一個(gè)散點(diǎn)圖外加兩個(gè)子圖,并且這兩個(gè)子圖的布局要與左下角的散點(diǎn)圖保持很多的一致兔仰,例如共享x軸(上),共享y軸(右)蕉鸳,而且還得在右上角保留一個(gè)小小的空白區(qū)域乎赴。
所以如果要畫一個(gè)上面效果的圖,要寫的代碼量還是挺多的潮尝。

但使用plotly.express就很好的增添了這么一個(gè)語法糖的模塊榕吼,從而讓畫這樣的圖大大輕松。

ps:就算這個(gè)圖在繪制的過程中出了點(diǎn)bug勉失,但是這個(gè)構(gòu)建好的圖的layout也可以利用起來羹蚣,可以把數(shù)據(jù)都刪掉,然后通過指定layout的方式重新再一個(gè)布局好的圖上進(jìn)行繪圖乱凿。

自動(dòng)化的pairwise散點(diǎn)圖

同上的顽素,直接看代碼吧

import plotly.express as px
iris = px.data.iris()
fig = px.scatter_matrix(iris, dimensions=["sepal_width", "sepal_length", "petal_width", "petal_length"], color="species")
fig.show()

這種pairwise的散點(diǎn)圖之前在plotly上畫起來也非常的困難,但其實(shí)在別的繪圖模塊里就比較常見徒蟆。
例如seabornScatterplot Matrix
或者說基于ggplotggpairs

自動(dòng)化的Sankey 圖

接下來一個(gè)也是比較喜歡的一個(gè)圖胁出,因?yàn)樵?jīng)為了畫這么一個(gè)圖就辛苦的看文檔然后糾結(jié)了很久。

import plotly.express as px
tips = px.data.tips()
fig = px.parallel_categories(tips, color="size", color_continuous_scale=px.colors.sequential.Inferno)
fig.show()
sankey plot demo

但通過這么簡單的一個(gè)px.parallel_categories就可以簡單的在一堆通過多個(gè)分類變量描述的樣本中段审,用一個(gè)sankey plot去把分類變量之間的關(guān)系描述清楚全蝶。

添加動(dòng)畫控制(animation)

import plotly.express as px
gapminder = px.data.gapminder()
fig = px.scatter(gapminder, x="gdpPercap", y="lifeExp", animation_frame="year", animation_group="country",
           size="pop", color="continent", hover_name="country", facet_col="continent",
           log_x=True, size_max=45, range_x=[100,100000], range_y=[25,90])
fig.show()

交互式的網(wǎng)頁的其中一個(gè)好處就是可以使用動(dòng)畫animation,但是plotly中的動(dòng)畫控制對于初學(xué)者來說就常常十分難以理解,我自己如非必要也不會(huì)去寫這么一個(gè)動(dòng)畫控制抑淫,因?yàn)榫头浅5碾y寫绷落。雖然寫好了以后也很難展示 因?yàn)楹茈y給別人一個(gè)網(wǎng)頁的結(jié)果,但從交流/展示上來說始苇,就會(huì)非常的有意思砌烁。

  • 由于簡書還不支持嵌入js,所以以下圖只是靜態(tài)圖埂蕊,建議到鏈接去看一下效果(:з」∠)

以上代碼中通過animation_frame來初始化了一個(gè)slider從而達(dá)到了一個(gè)往弓,拖動(dòng)進(jìn)度條就可以觀察到不同年份的數(shù)據(jù)散點(diǎn)圖的效果。

結(jié)語

數(shù)據(jù)可視化是個(gè)非常非常重要的展示的能力蓄氧,數(shù)據(jù)往往只是一堆雜亂無章的數(shù)字函似,只有有效的組織、排序喉童,才能把原來雜亂無章的數(shù)據(jù)撇寞,有序的很好的展現(xiàn)出來。而只有讓別人看懂你的數(shù)據(jù)堂氯,才能讓別人理解你的數(shù)據(jù)蔑担,所以可視化,非常非常重要咽白,別人完全不知道你的數(shù)據(jù)的由來啤握、設(shè)計(jì)、前因后果晶框,所以企圖讓一個(gè)別人理解你的數(shù)據(jù)排抬,只有好的可視化才能達(dá)到。

大家一起來學(xué)習(xí)可視化鴨~~~
下面的鏈接也放一些我收藏的對學(xué)習(xí)可視化很有幫助的網(wǎng)頁授段。

參考鏈接

plotly 新增模塊express
VisuAlgo - visualising data structures and algorithms through animation算法可視化
Visualizing Network Graphs — Bokeh 1.2.0 documentation
D3 / Observable
自定義地圖 | 高德地圖API

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蹲蒲,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子侵贵,更是在濱河造成了極大的恐慌届搁,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窍育,死亡現(xiàn)場離奇詭異卡睦,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蔫骂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進(jìn)店門么翰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人辽旋,你說我怎么就攤上這事浩嫌¢艹伲” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵码耐,是天一觀的道長追迟。 經(jīng)常有香客問我,道長骚腥,這世上最難降的妖魔是什么敦间? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮束铭,結(jié)果婚禮上廓块,老公的妹妹穿的比我還像新娘。我一直安慰自己契沫,他們只是感情好带猴,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著懈万,像睡著了一般拴清。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上会通,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天口予,我揣著相機(jī)與錄音,去河邊找鬼涕侈。 笑死沪停,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的裳涛。 我是一名探鬼主播牙甫,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼调违!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起泻轰,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤技肩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后浮声,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體虚婿,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年泳挥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了然痊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,030評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡屉符,死狀恐怖剧浸,靈堂內(nèi)的尸體忽然破棺而出锹引,到底是詐尸還是另有隱情,我是刑警寧澤唆香,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布嫌变,位于F島的核電站,受9級特大地震影響躬它,放射性物質(zhì)發(fā)生泄漏腾啥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一冯吓、第九天 我趴在偏房一處隱蔽的房頂上張望倘待。 院中可真熱鬧,春花似錦组贺、人聲如沸凸舵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贞间。三九已至,卻和暖如春雹仿,著一層夾襖步出監(jiān)牢的瞬間增热,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工胧辽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留峻仇,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓邑商,卻偏偏與公主長得像摄咆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子人断,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評論 2 355

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