【Python】参考ggplot2,Seaborn将迎来超大版本更新!
最新消息,Seaborn將迎來API重寫級別版本更新,本文羅列重大改變,太值得期待了!
Matplotlib是Python最重要的可視化庫,但是,過于復(fù)雜,Seaborn對其主要功能做了封裝,隱藏復(fù)雜參數(shù),僅需要幾行代碼就可以實現(xiàn)優(yōu)美的統(tǒng)計圖,但功能有限:Seaborn;
此次更新主要拓展Seaborn的核心功能 —與pandas的集成、數(shù)據(jù)和圖形之間的自動映射、統(tǒng)計轉(zhuǎn)換 — 使得Seaborn成為一個更具組合性、可擴展性和全面性的可視化庫。
作者直言,更新靈感不少源于R語言中g(shù)gplot2背后的圖層圖形語法,去其糟粕,取其精華,做了很多優(yōu)化,但是Seaborn不等于Python版ggplot2 (plotnine);
為了這次更新,已經(jīng)開發(fā)了8個月,依舊還有很多工作要做,更新版具體發(fā)布時間待定,但是會在發(fā)布前發(fā)布系列alpha/beta releases,以獲取測試反饋。
👇👇下面看看主要哪些方面發(fā)生了更新👇👇
嫌長文,直接看文章末尾小結(jié)。
基本語法
導(dǎo)入Seaborn
#方法一 import?seaborn.objects?as?so?#不再是import?seaborn?as?sns#方法二 from?seaborn.objects?import?*繪圖主函數(shù)變成了seaborn.objects.Plot
import?seaborn tips?=?seaborn.load_dataset("tips")?#導(dǎo)入內(nèi)置數(shù)據(jù)so.Plot(tips,?x="total_bill",?y="tip")?#繪制空Figureadd在Figure上添加散點圖層,
so.Plot(tips,?x="total_bill",?y="tip").add(so.Scatter())? #.add(so.Scatter())是不是有g(shù)gplot2?+?添加圖層的影子~全局個性化,
so.Plot(tips).add(so.Scatter(),?x="total_bill",?y="tip")每個圖層個性化,
(so.Plot(tips,?x="total_bill",?y="tip").add(so.Scatter(color=".6")).add(so.Scatter(),?data=tips.query("size?==?2")) )(so.Plot(tips,?x="total_bill",?y="tip",?color="day",?fill="time").add(so.Scatter(fillalpha=.8)) )核心組件1-圖層對象Mark
每個圖層都需要一個Mark對象,它定義了如何繪制繪圖。將對應(yīng)于現(xiàn)有seaborn功能和提供新功能的標(biāo)記,但是,很多還沒有實現(xiàn),
so.Plot(tips,?y="day",?x="total_bill") .add(so.Dot(color="#698",?alpha=.5))?#直接設(shè)置Mark(此處為Dot)特性,而不是映射它們.核心組件2-數(shù)據(jù)轉(zhuǎn)換Stat
在新版本中,每個層都可以接受一個數(shù)據(jù)轉(zhuǎn)換的Stat對象,
so.Plot(fmri,?x="timepoint",?y="signal",?color="event").add(so.Line(),?so.Agg(),?group="subject")自定義Mark和Stat對象
class?PeakAnnotation(so.Mark):def?_plot_split(self,?keys,?data,?ax,?kws):ix?=?data["y"].idxmax()ax.annotate("The?peak",?data.loc[ix,?["x",?"y"]],xytext=(10,?-100),?textcoords="offset?points",va="top",?ha="center",arrowprops=dict(arrowstyle="->",?color=".2"),)(so.Plot(fmri,?x="timepoint",?y="signal").add(so.Line(),?so.Agg()).add(PeakAnnotation(),?so.Agg()) )核心組件3-圖形自適應(yīng)the Move
新版本里,圖形的一些調(diào)整都匯聚在move對象中,取代老版本中的dodge=xx、jitter=xx、multiple=xx等設(shè)置,
(so.Plot(tips,?"day",?"total_bill",?color="time",?alpha="sex").add(so.Bar(),?so.Agg(),?move=so.Dodge()) )(so.Plot(tips,?"day",?"total_bill",?color="time",?alpha="smoker").add(so.Dot(),?move=[so.Dodge(by=["color"]),?so.Jitter(.5)]) )個性化設(shè)置
新版本將添加更多圖形個性化設(shè)置功能,
(so.Plot(planets,?x="mass",?y="distance",?color="year").map_color("flare",?norm=(2000,?2010)).scale_numeric("x",?"log").add(so.Scatter(pointsize=3)) ) #以上設(shè)置順序不分先后(so.Plot(planets,?y="year",?x="orbital_period").scale_numeric("x",?"log").add(so.Scatter(alpha=.5,?marker="x"),?color="method").add(so.Line(linewidth=2,?color=".2"),?so.Agg(),?orient="h") )子圖定義
新版本中分面Facet被隱式地內(nèi)置,
(so.Plot(tips,?x="total_bill",?y="tip").facet("time",?order=["Dinner",?"Lunch"]).add(so.Scatter()) )注意區(qū)別于老版本的FacetGrid,
(so.Plot(tips,?x="total_bill",?y="tip",?col="day").add(so.Scatter(color=".75"),?col=None).add(so.Scatter(),?color="day").configure(figsize=(7,?3)) )新版本依舊包含PairGrid功能,
(so.Plot(tips,?y="day").pair(x=["total_bill",?"tip"]).add(so.Dot()) )FacetGrid和PairGrid可聯(lián)合使用,
(so.Plot(tips,?x="day").facet("sex").pair(y=["total_bill",?"tip"]).add(so.Dot()) )faceted和paired圖均可沿著列和行“wrapped”,
class?Histogram(so.Mark):??#?TODO?replace?once?we?implementdef?_plot_split(self,?keys,?data,?ax,?kws):ax.hist(data["x"],?bins="auto",?**kws)ax.set_ylabel("count")(so.Plot(tips).pair(x=tips.columns,?wrap=3).configure(sharey=False).add(Histogram()) )總之,新版本中,“axes-level” 和“figure-level” 無差異。
圖形迭代、渲染
迭代:可定義一個基礎(chǔ)圖形,然后按需求在基礎(chǔ)圖形上繪制不同圖形,不同圖形之間相互獨立,
#定義基礎(chǔ)圖形p p?=?(so.Plot(fmri,?x="timepoint",?y="signal",?color="event").map_color(palette="crest") )p.add(so.Line())?#繪制折線圖p.add(so.Line(),?group="subject")與Matplotlib集成
“axes-level”容易實現(xiàn),可直接對子圖操作,
import?matplotlib?as?mpl _,?ax?=?mpl.figure.Figure(constrained_layout=True).subplots(1,?2) (so.Plot(tips,?x="total_bill",?y="tip").on(ax).add(so.Scatter()) )“figure-level”??比較難纏,
f?=?mpl.figure.Figure(constrained_layout=True) (so.Plot(tips,?x="total_bill",?y="tip").on(f).add(so.Scatter()).facet("time") )subfigures讓多子圖更簡單,
sf1,?sf2?=?f.subfigures(1,?2) (so.Plot(tips,?x="total_bill",?y="tip",?color="day").add(so.Scatter()).on(sf1).plot() ) (so.Plot(tips,?x="total_bill",?y="tip",?color="day").facet("day",?wrap=2).add(so.Scatter()).on(sf2).plot() )小結(jié)
如果該新版本發(fā)布,Seaborn老版本子圖難實現(xiàn)、個性化難、需要重度依賴Matplotlib的缺陷基本被修復(fù);
新版本吸收了ggplot2的部分屬性,對R用戶比較容易上手;
但是,Seaborn支持圖形類別有限的問題沒有看到修復(fù);
再者,到底啥時候新版本能夠發(fā)布,This is very much a work in progress;
總之,非常值得期待。
ref: https://seaborn.pydata.org/nextgen/
-END-
往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載中國大學(xué)慕課《機器學(xué)習(xí)》(黃海廣主講)機器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機器學(xué)習(xí)在線手冊深度學(xué)習(xí)筆記專輯《統(tǒng)計學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專輯 AI基礎(chǔ)下載本站qq群955171419,加入微信群請掃碼:總結(jié)
以上是生活随笔為你收集整理的【Python】参考ggplot2,Seaborn将迎来超大版本更新!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JDK线程池CompletionServ
- 下一篇: 【CV】语义分割:最简单的代码实现!