日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python 可视化库

發(fā)布時間:2025/4/5 python 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 可视化库 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

https://www.infoq.cn/article/pSV6tZ1SbUC8qJpo_v8H

在奧斯汀舉行的SciPy 2018年特別會議上,大量開源 Python 可視化工具的代表分享了他們對 Python 數(shù)據(jù)可視化未來的展望。我們看到了Matplotlib、Plotly、VisPy等許多庫的更新。我作為PyViz、GeoViews、Datashader、Panel、hvPlot和Bokeh的代表參加了 SciPy 2018 大會,我在 Anaconda 的同事 Jean-Luc Stevens 則代表HoloViews參加。本文介紹了當(dāng)前可用的軟件包以及它們之間的關(guān)系。

當(dāng)前生態(tài)

作為背景介紹,我先展示 Jake VanderPlas 的概覽圖,其中有許多不同而又相互關(guān)聯(lián)的 Python 可視化庫:

從中可以看到,這些庫主要可以分成幾組,每個組都有不同的起源、歷史和關(guān)注點(diǎn)。顯然,可視化物理位置數(shù)據(jù)的“SciVis”庫(在圖左下方)可以單獨(dú)分成一組。這些工具(VisPy、glumpy、GR、Mayavi、ParaView、VTK和yt)主要是基于 1992 年 OpenGL 圖形標(biāo)準(zhǔn)構(gòu)建的,為規(guī)則或不規(guī)則網(wǎng)格數(shù)據(jù)提供了三維或四維(3D 加上時間維度)物理過程圖形密集可視化。這些庫對富 Web 應(yīng)用程序的支持早于 HTML5,通常側(cè)重于工程或科學(xué)環(huán)境中的高性能桌面 GUI 應(yīng)用程序。

其他庫幾乎都屬于“InfoVis”組,側(cè)重于空間的信息可視化,而不一定是三維的物理世界。InfoVis 庫使用打印頁面或計算機(jī)屏幕的兩個維度來解釋抽象空間,通常使用軸和標(biāo)簽。InfoVis 庫可以進(jìn)一步細(xì)分為許多子組。

Matplotlib

2003 年發(fā)布的最古老也最受流行的 InfoVis 庫之一,具有非常廣泛的 2D 繪圖類型和輸出格式。Matplotlib對富 Web 應(yīng)用程序的支持也早于 HTML5,而其側(cè)重點(diǎn)放在了靜態(tài)圖像和使用桌面 GUI 工具包(如 Qt 和 GTK)的交互式圖形上。Matplotlib 提供了一些 3D 支持,但比 SciVis 庫提供的支持要有限得多。

基于 Matplotlib 的庫

多年來,許多工具都是基于 Matplotlib 的 2D 繪圖功能構(gòu)建的,要么將它作為某類數(shù)據(jù)或某一領(lǐng)域(pandas、NetworkX、Cartopy、yt等)的渲染引擎,要么提供一個更高級的 API 來簡化圖形繪制(ggplot、plotnine、HoloViews、GeoViews等),要么添加了額外的圖形類型(seaborn等)。

JavaScript

在 HTML5 為瀏覽器帶來豐富的交互性之后,許多庫就開始為網(wǎng)頁和 Jupyter Notebook 提供交互式 2D 繪圖,要么使用定制的 JS(Bokeh、Toyplot) ,要么像 D3 一樣以封裝現(xiàn)有的 JS 庫為主(Plotly、bqplot)。通過封裝現(xiàn)有的 JS 庫,很容易在巨大的 JS 市場引入新的圖形,而使用自定義 JS 則允許定義較底層的 JS 原語,這些原語可以在 Python 中組合成全新的圖形類型(如 Bokeh)。

JSON

隨著 D3 這樣的 JavaScript 庫日趨成熟,它們的功能已經(jīng)被納入聲明性 JSON 規(guī)范(Vega、Vega-Lite),使得適用任何語言生成 JavaScript 圖形變得更簡單,現(xiàn)在也包括了 Python(通過Altair,之前是通過vincent)。具有可移植 JSON 形式的完整繪圖規(guī)范允許跨多種工具進(jìn)行集成。

WebGL

就像 HTML5 對 JavaScript 2D 繪圖所做的那樣,WebGL 標(biāo)準(zhǔn)為瀏覽器 3D 交互和 Jupyter 帶來了可能性,這導(dǎo)致了基于 three.js(pythreejs、ipyvolume) 、vtk.js(itk-jupyter-widgets) 或 regl (Plotly)的瀏覽器 3D 繪圖。這些新的基于 Web 的 3D 方法沒有一種能夠達(dá)到桌面庫 SciVis 3D 的廣度和深度,但是,它們確實可以與 Jupyter Notebook 完全集成,并且可以通過 Web 進(jìn)行共享和遠(yuǎn)程使用。因此,盡管 WebGL 工具與 SciVis 工具有一些共同的應(yīng)用,但它們與其他 InfoVis 工具的關(guān)系更為緊密。

其他

還有其他很多庫,盡管沒有出現(xiàn)在 Jake 的圖中,但它們確實提供了其他補(bǔ)充功能(例如graphviz用于可視化網(wǎng)絡(luò))。

不同可視化工具的差異化特質(zhì)

以上基于歷史和技術(shù)的分類有助于解釋我們當(dāng)前為什么有大量 Python 可視化程序包,同時,它也有助于解釋為什么不同包之間在用戶功能方面存在著如此大的差異。具體來說,它們的主要差別在于支持的繪圖類型、數(shù)據(jù)規(guī)模、用戶界面和 API 類型,因此在選擇庫時不能只是出于個人喜好或便利性,而是需要考慮到以下一些因素。

繪圖類型

最基本的繪圖類型許多庫都有,但其他的繪圖類型只有某些庫會提供。考慮到庫的數(shù)量、繪圖類型及它們在隨時間變化,很難精確地描述每個庫都支持什么。但是,如果你看一下每個庫的示例,通常就可以弄清楚它們各自的側(cè)重點(diǎn)是什么。下面是一個粗略的指南:

  • 統(tǒng)計繪圖(散點(diǎn)圖、線、區(qū)域、條形圖、直方圖):幾乎所有的 InfoVis 庫都可以很好地覆蓋這些圖形,但 Seaborn、bqplot、Altair、ggplot2、plotnine 會比較側(cè)重這些;
  • 圖像、規(guī)則網(wǎng)格、矩形網(wǎng)格:Bokeh、Datashader、HoloViews、Matplotlib、Plotly 及大多數(shù) SciVis 庫都提供了很好的支持;
  • 不規(guī)格 2D 網(wǎng)格(三角網(wǎng)格):SciVis 庫以及 Matplotlib、Bokeh、Datashader、HoloViews 提供了很好的支持;
  • 地理數(shù)據(jù):Matplotlib(和 Cartopy 一起)、GeoViews、ipyleaflet、Plotly;
  • 網(wǎng)絡(luò) / 圖:NetworkX、Plotly、Bokeh、HoloViews、Datashader;
  • 3D(網(wǎng)格、散點(diǎn)等):SciVis 庫完全支持,Plotly、Matplotlib、HoloViews 和 ipyvolume 部分支持。

數(shù)據(jù)規(guī)模

每個庫的架構(gòu)和底層技術(shù)決定了它們所支持的數(shù)據(jù)規(guī)模,這樣就可以知道該庫是否適用于大圖片、電影、多維數(shù)組、長時間序列、網(wǎng)格或其他大型數(shù)據(jù)集:

  • SciVis:通常可以處理非常大的網(wǎng)格數(shù)據(jù)集,GB 級別或更大,它使用編譯過的“數(shù)據(jù)庫(data libraries)”和原生 GUI 應(yīng)用程序;
  • 基于 Matplotlib:通常可以處理幾十萬個點(diǎn),并提供合理的性能,在某些特殊情況下可以處理更多的點(diǎn);
  • JSON:如果沒有特殊處理,基于 JSON 文本的數(shù)據(jù)編碼會將基于 JSON 的規(guī)范限制在幾千個點(diǎn)到幾十萬個點(diǎn)之間,這取決于文件大小和所需的文本處理;
  • JavaScript:ipywidgets、Bokeh 和 Plotly 都使用 JSON,但增加了額外的二進(jìn)制數(shù)據(jù)傳輸機(jī)制,以便能夠處理數(shù)十萬到數(shù)百萬個數(shù)據(jù)點(diǎn);
  • WebGL:為了獲得良好的性能,使用 HTML Canvas 的 JavaScript 庫限制在最多幾十萬個點(diǎn),但是 WebGL(通過 ipyvolume、Plotly 或 Bokeh)最多支持?jǐn)?shù)百萬個點(diǎn);
  • 服務(wù)器端渲染:來自 Datashader 或 Vaex 的外部 InfoVis 服務(wù)器端渲染支持?jǐn)?shù)十億、數(shù)萬億或更多數(shù)據(jù)點(diǎn)進(jìn)入 Web 瀏覽器,通過將任意大小的分布式數(shù)據(jù)集或非核心數(shù)據(jù)集轉(zhuǎn)換為固定大小的圖像嵌入到客戶端瀏覽器中。

由于這些類型的庫所支持的數(shù)據(jù)規(guī)模(在某種程度上可以說是數(shù)據(jù)類型)范圍很大,因此,需要使用大型數(shù)據(jù)集的用戶首先需要選擇合適的庫。

用戶界面和發(fā)布

各種類型的庫在圖形的使用方式方面存在巨大差異。

  • 靜態(tài)圖像:大多數(shù)庫現(xiàn)在支持通過“headless”的方式來創(chuàng)建靜態(tài)圖像,至少對于 PNG 和平滑矢量格式(如 SVG 或 PDF)來說是這樣的。
  • 原生 GUI 應(yīng)用程序:SciVis 庫加上 Matplotlib 和 Vaex 可以創(chuàng)建特定于操作系統(tǒng)的 GUI 窗口,這些窗口提供了很高的性能,支持大型數(shù)據(jù)集,并與其他桌面應(yīng)用程序集成。但是,它們與特定的操作系統(tǒng)綁定在一起,通常需要在本地運(yùn)行,而不是在 Web 上。在某些情況下,基于 JavaScript 的工具也可以通過嵌入 Web 瀏覽器嵌入到本地應(yīng)用程序中。
  • 導(dǎo)出到 HTML:大多數(shù) JavaScript 和 JSON 庫都可以在無服務(wù)器模式下運(yùn)行,生成交互式圖形(縮放、平移等),可以通過電子郵件或在 Web 服務(wù)器上發(fā)布,而不需要依賴 Python。
  • Jupyter Notebook:大多數(shù) InfoVis 庫現(xiàn)在都支持 Jupyter Notebook 交互式應(yīng)用,借助 Python 提供的基于 JavaScript 的繪圖。基于 ipywidgets 的項目提供了與 Jupyter 更緊密的集成,而其他一些方法只提供了有限的 Jupyter 交互性。
  • 基于 Web 的儀表盤和應(yīng)用程序:借助Dash,Plotly 圖形可以用于單獨(dú)部署的應(yīng)用程序,Bokeh、HoloViews 和 GeoViews 可以使用Bokeh 服務(wù)器部署。大多數(shù)其他 InfoVis 庫可以使用新的Panel庫部署成儀表盤,比如 Matplotlib、Altair、Plotly、Datashader、hvPlot、Seaborn、plotnine 和 yt。然而,盡管它們提供了基于 Web 的交互性,但基于 ipywidgets 的庫(ipyleaflet、pythreejs、ipyvolume、bqplot)很難部署成面向公眾的應(yīng)用程序,因為 Jupyter 協(xié)議允許執(zhí)行任意代碼(請參考Jupyter 儀表盤和flask-ipywidgets,它們或許可以作為潛在的解決方案)。

因此,用戶需要考慮給定的庫是否涵蓋了他們對可視化的預(yù)期使用范圍。

API 類型

各種 InfoVis 庫提供了大量的編程接口,適用于各種差別很大的用戶,并提供了不同創(chuàng)建可視化的方式。在執(zhí)行普通任務(wù)所需的代碼量、為用戶處理不常見任務(wù)提供多大的控制自由度以及將原語組合成新類型圖形方面,這些 API 存在巨大的差別。

  • 面向?qū)ο蟮?Matplotlib API:Matplotlib 的主要 API,允許完全控制和組合,但對于一些常見的任務(wù),如創(chuàng)建子圖,則非常復(fù)雜和繁瑣。
  • 命令式 Pyplot API:Matplotlib 的基本接口,允許使用 Matplotlib 風(fēng)格的命令式命令,對于比較簡單的情況,這些命令很簡潔,但不可組合。因此,它們在很大程度上僅限于一組特定的支持選項。
  • 命令式 Pandas .plot() API:以 dataframe 為中心,用戶將主要通過 Pandas 來準(zhǔn)備數(shù)據(jù),然后選擇一個子集進(jìn)行繪圖。它們現(xiàn)在支持各種圖形庫及其他數(shù)據(jù)結(jié)構(gòu)。不是直接組合,但可以從底層繪圖庫(如 hvPlot)返回可組合的對象。
  • 聲明式圖形 API:受“圖形語法(?Grammar of Graphics)”啟發(fā)的庫(如 ggplot、plotnine、Altair)和 Bokeh 提供了一種自然的方式來組合圖形原語(如坐標(biāo)軸和符號),用來創(chuàng)建完整的圖形。
  • 聲明式數(shù)據(jù) API:構(gòu)建在其他庫的原生 API 的基礎(chǔ)上,HoloViews 和 GeoViews 提供了一個更高級的聲明式復(fù)合 API,主要關(guān)注注解、描述和使用可視化數(shù)據(jù),而不是繪圖元素。

這些 API 都適用于具有不同背景和目標(biāo)的用戶,這使得處理一些任務(wù)變得更簡單,而另一些任務(wù)則變得更加困難。除了 Matplotlib 之外,大多數(shù)庫都支持一種或至多兩種備選 API。因此,選擇一個符合每個用戶技術(shù)背景和首選工作流的庫顯得非常重要。

最新趨勢

如你所見,Python 有大量的可視化功能庫,大量可用的庫反映出了方法和側(cè)重點(diǎn)的多樣性。方法之間的差異仍然很重要,并且具有深遠(yuǎn)的影響,這意味著用戶在特定的方法上大幅投入之前需要考慮這些差異。但是,正如我們在 SciPy 2018 上看到的那樣,趨同趨勢降低了用戶選擇的關(guān)鍵性。

查看英文原文:https://www.anaconda.com/blog/developer-blog/python-data-visualization-2018-why-so-many-libraries

轉(zhuǎn)載于:https://www.cnblogs.com/davidwang456/articles/10094925.html

總結(jié)

以上是生活随笔為你收集整理的Python 可视化库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。