Plotly圖表全面使用指南 -- Displaying Figures in Python

文中內容僅限技術學習與代碼實踐參考,市場存在不確定性,技術分析需謹慎驗證,不構成任何投資建議。

在 Python 中顯示圖形

使用 Plotly 的 Python 圖形庫顯示圖形。

顯示圖形

Plotly的Python圖形庫plotly.py提供了多種顯示圖形的選項和方法。

通常有五種不同的方法可以顯示plotly圖形:

  1. 在腳本或筆記本中使用renderers框架(本文主要主題)
  2. 在Web應用中使用Dash
  3. ipywidgets環境中使用FigureWidget而非Figure
  4. 導出為HTML文件并在瀏覽器中立即或稍后加載
  5. 使用Kaleido將圖形渲染為靜態圖像文件(如PNG/JPEG/SVG/PDF/EPS)并在任何查看器中加載

下文將討論前三種方法。

使用renderers框架顯示圖形

renderers框架是一種靈活的方法,可在多種環境中顯示plotly.py圖形。要使用此框架顯示圖形,可以在圖形對象上調用.show()方法,或將圖形傳遞給plotly.io.show函數。兩種方式都會使用當前默認的渲染器顯示圖形。

import plotly.graph_objects as go
fig = go.Figure(data=[go.Bar(y=[2, 1, 3])],layout_title_text="使用fig.show()顯示的圖形"
)
fig.show()

img

大多數情況下,可以省略.show()調用,讓圖形自動顯示:

import plotly.graph_objects as go
fig = go.Figure(data=[go.Bar(y=[2, 1, 3])],layout_title_text="自動顯示的圖形"
)
fig

img

需滿足兩個條件才能自動顯示圖形:首先,單元格中的最后一個表達式必須是圖形;其次,plotly.py必須在IPython內核中運行。

多數環境下會自動選擇合適的渲染器,無需額外配置。 這些環境包括經典的Jupyter Notebook、JupyterLab、VS Code筆記本、Google Colab、Kaggle筆記本、Azure筆記本以及Python交互式shell。

其他環境(如IPython控制臺、QtConsole、Spyder等)也支持兼容的渲染器。

接下來將介紹如何配置默認渲染器,并詳細描述所有內置渲染器及其適用場景。

注意:renderers框架是早期版本中plotly.offline.iplotplotly.offline.plot函數的通用化實現。這些函數已通過renderers框架重構,仍支持向后兼容,但本文不作討論。

設置默認渲染器

使用plotly.io.renderers配置對象管理當前和可用的渲染器。顯示此對象可查看當前默認渲染器和所有可用渲染器列表。

import plotly.io as pio
pio.renderers

您看到的默認渲染器可能與此處不同,因為plotly.py會在啟動時嘗試自動檢測合適的渲染器。可通過將可用渲染器名稱賦值給pio.renderers.default屬性來更改默認渲染器。例如,切換到在默認瀏覽器標簽頁中打開圖形的'browser'渲染器:

import plotly.io as pio
pio.renderers.default = "browser"

注意:默認渲染器在單次會話中持續有效,但不會跨會話保存。在IPython內核中工作意味著默認渲染器在內核生命周期內有效,但重啟內核后不會保留。

也可通過系統環境變量設置默認渲染器。啟動時,plotly.py會檢查名為PLOTLY_RENDERER的環境變量。如果此變量設置為可用渲染器名稱,則將其設為默認值。

臨時覆蓋默認渲染器

可通過向show()方法傳遞renderer參數臨時覆蓋默認渲染器。以下示例在不更改默認渲染器的情況下使用svg渲染器(后文介紹)顯示圖形:

import plotly.graph_objects as go
fig = go.Figure(data=[go.Bar(y=[2, 1, 3])],layout_title_text="使用'svg'渲染器顯示的圖形"
)
fig.show(renderer="svg")
內置渲染器

本節詳細介紹內置渲染器,以便選擇最適合需求的選項。

交互式渲染器

交互式渲染器使用plotly.js JavaScript庫顯示圖形,支持平移、縮放、懸停提示等交互功能。

notebook

專為經典Jupyter Notebook(非JupyterLab)設計。首次渲染圖形時將完整的plotly.js JavaScript庫添加到筆記本中,因此無需互聯網連接。

此渲染器適合導出為HTML文件的筆記本(通過nbconvert或"下載為HTML"操作),因為導出的HTML文件可離線工作。

注意:添加plotly.js包會使筆記本增加幾MB大小。若始終有網絡連接,可考慮使用notebook_connected渲染器以減小筆記本體積。

notebook_connected

notebook渲染器相同,但plotly.js庫從在線CDN加載。這節省了幾MB空間,但需要互聯網連接才能顯示圖形。

此渲染器適合通過nbviewer共享的筆記本,因為用戶需聯網才能訪問nbviewer。

kaggleazure

notebook_connected的別名,適用于Kaggle內核和Azure Notebooks。

colab

專為Google Colab設計的自定義渲染器。

browser

在默認瀏覽器的標簽頁中打開圖形。此渲染器要求Python內核與瀏覽器在同一本地機器運行,不兼容Jupyter Hub或在線筆記本服務。

實現說明1:"默認瀏覽器"由Pythonwebbrowser模塊選擇。

實現說明2:通過單次使用的本地Web服務器在端口上提供圖形。服務器在圖形加載后立即關閉,因此刷新瀏覽器無法恢復圖形。

firefoxchromechromium

browser渲染器相同,但強制使用特定瀏覽器。

iframeiframe_connected

將圖形寫入獨立的HTML文件,并顯示引用這些文件的iframe元素。iframe渲染器在HTML文件中包含plotly.js庫,iframe_connected則引用在線CDN位置加載plotly.js。因此iframe_connected生成的文件更小,但需要聯網。

此渲染器適用于包含大量大型圖形的筆記本。使用notebooknotebook_connected時,所有圖形數據都內聯存儲在筆記本中。如果導致筆記本過大,可使用iframe渲染器替代,圖形數據存儲在單獨的HTML文件中,從而減小筆記本體積。

實現說明:HTML文件存儲在iframe_figures子目錄中,文件名基于生成圖形的筆記本單元格執行序號。這意味著每次重啟內核都會覆蓋之前的HTML文件。因此不應在相同目錄存儲多個使用iframe渲染器的筆記本,否則可能導致圖形相互覆蓋。

plotly_mimetype

創建圖形的規范(稱為MIME類型包),并請求當前用戶界面顯示它。支持此渲染器的界面包括JupyterLab、nteract和VS Code筆記本界面。

jupyterlabnteractvscode

plotly_mimetype的別名,適用于JupyterLab、nteract和VS Code筆記本界面。注意在VSCode中,用于渲染的plotly.js版本由vscode-python擴展提供,通常比最新版落后數周,因此最新功能可能無法立即使用。Nteract情況類似。

靜態圖像渲染器

提供一組渲染器將圖形顯示為靜態圖像。詳見靜態圖像導出頁面。

pngjpegsvg

這些渲染器將圖形顯示為靜態的.png.jpeg.svg文件。適用于不支持內聯HTML輸出但支持內聯靜態圖像的環境,如QtConsole、Spyder和PyCharm筆記本界面。

import plotly.graph_objects as go
fig = go.Figure(data=[go.Bar(y=[2, 1, 3])],layout_title_text="使用'png'渲染器顯示的圖形"
)
fig.show(renderer="png")
pdf

將圖形顯示為靜態PDF文件。特別適用于通過nbconvert的LaTeX導出功能導出為PDF的筆記本。

其他渲染器
json

在支持的環境(JupyterLab、nteract、VS Code筆記本界面)中,以可折疊的交互式樹結構顯示圖形的JSON表示。這對檢查復雜圖形的結構非常有用。

多渲染器

通過用"+"連接名稱可指定多個渲染器。這在需要支持多環境的代碼中很有用。例如,如果筆記本的默認渲染器字符串為"notebook+plotly_mimetype+pdf",則該筆記本可在經典Jupyter Notebook、JupyterLab中運行,并支持通過nbconvert導出為PDF。

自定義內置渲染器

大多數內置渲染器都有可配置選項。要查看渲染器描述及其配置選項,可在plotly.io.renderers配置對象上使用字典式鍵訪問并顯示它。例如訪問并顯示png渲染器:

import plotly.io as pio
png_renderer = pio.renderers["png"]
png_renderer

輸出顯示png渲染器支持三個屬性:widthheightscale。可通過賦值自定義這些屬性。

以下示例自定義png渲染器更改圖像尺寸,設為默認渲染器后顯示圖形:

import plotly.io as pio
png_renderer = pio.renderers["png"]
png_renderer.width = 500
png_renderer.height = 500pio.renderers.default = "png"import plotly.graph_objects as go
fig = go.Figure(data=[go.Bar(y=[2, 1, 3])],layout_title_text="使用'png'渲染器顯示的圖形"
)
fig.show()

img

也可通過向show()方法傳遞關鍵字參數臨時覆蓋渲染器參數值:

import plotly.graph_objects as gofig = go.Figure(data=[go.Bar(y=[2, 1, 3])],layout_title_text="使用'png'渲染器顯示的圖形"
)
fig.show(renderer="png", width=800, height=300)

img

在Dash中顯示圖形

Dash是使用Plotly圖形構建Python分析應用的最佳方式。要運行下方應用,請執行pip install dash,點擊"Download"獲取代碼并運行python app.py

參考官方Dash文檔入門,學習如何輕松設計和部署此類應用。

from dash import Dash, dcc, html, Input, Output
import plotly.graph_objects as go
import numpy as npapp = Dash(__name__)app.layout = html.Div([html.H4('Interactive plot with custom data source'),dcc.Graph(id="graph"),html.P("Number of bars:"),dcc.Slider(id="slider", min=2, max=10, value=4, step=1),
])@app.callback(Output("graph", "figure"),Input("slider", "value"))
def update_bar_chart(size):data = np.random.normal(3, 2, size=size) # replace with your own data sourcefig = go.Figure(data=[go.Bar(y=data)],layout_title_text="Native Plotly rendering in Dash")return figapp.run(debug=True)

使用ipywidgets顯示圖形

Plotly圖形可在ipywidgets環境中通過plotly.graph_objects.FigureWidget對象顯示。FigureWidget既是圖形對象(類似plotly.graph_objects.Figure),因此可以像常規Figure一樣添加軌跡和更新;同時也是ipywidgets對象,這意味著可與其他ipywidgets一起顯示以構建用戶界面。

詳見Plotly FigureWidget概述了解如何將plotly.py圖形與ipywidgets集成。

重要提示:FigureWidget不使用上述渲染器框架,因此不應在FigureWidget對象上使用plotly.io.show函數。

性能

無論選擇何種方式顯示圖形,圖形數據結構都會首先(自動在內部)序列化為JSON字符串,然后從Python環境傳輸到瀏覽器(或先到HTML文件,或到Kaleido進行靜態圖像導出)。

5.0版新增功能

對于包含大量數據點或大型numpy數組/數據框的圖形,默認JSON序列化機制可能較慢。如果安裝了orjsonplotly將使用它替代內置的json包,這可為大型圖形帶來5-10倍加速。

圖形序列化為JSON后,必須由瀏覽器渲染(立即在用戶瀏覽器中,或導出為HTML后稍后渲染),或由Kaleido的內部無頭瀏覽器為靜態圖像導出立即渲染。渲染時間通常與圖形中的數據點總數、軌跡數和子圖數量成正比。當渲染性能較慢時,建議考慮使用plotly WebGL軌跡利用瀏覽器的GPU加速渲染,或使用Datashader庫在Python端渲染后通過px.imshow()渲染圖形。

風險提示與免責聲明
本文內容基于公開信息研究整理,不構成任何形式的投資建議。歷史表現不應作為未來收益保證,市場存在不可預見的波動風險。投資者需結合自身財務狀況及風險承受能力獨立決策,并自行承擔交易結果。作者及發布方不對任何依據本文操作導致的損失承擔法律責任。市場有風險,投資須謹慎。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/85546.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/85546.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/85546.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

getx用法詳細解析以及注意事項

源碼地址 在 Flutter 中,Get 是來自 get 包的一個輕量級、功能強大的狀態管理與路由框架,常用于: 狀態管理路由管理依賴注入(DI)Snackbar / Dialog / BottomSheet 管理本地化(多語言) 下面是 …

深度學習:人工神經網絡基礎概念

本文目錄: 一、什么是神經網絡二、如何構建神經網絡三、神經網絡內部狀態值和激活值 一、什么是神經網絡 人工神經網絡(Artificial Neural Network, 簡寫為ANN)也簡稱為神經網絡(NN),是一種模仿…

Unity2D 街機風太空射擊游戲 學習記錄 #12環射道具的引入

概述 這是一款基于Unity引擎開發的2D街機風太空射擊游戲,筆者并不是游戲開發人,作者是siki學院的涼鞋老師。 筆者只是學習項目,記錄學習,同時也想幫助他人更好的學習這個項目 作者會記錄學習這一期用到的知識,和一些…

網站如何啟用HTTPS訪問?本地內網部署的https網站怎么在外網打開?

在互聯網的世界里,數據安全已經成為了每個網站和用戶都不得不面對的問題。近期,網絡信息泄露事件頻發,讓越來越多的網站開始重視起用戶數據的安全性,因此啟用HTTPS訪問成為了一個熱門話題。作為一名網絡安全專家,我希望…

計算機網絡-----詳解網絡原理TCP/IP(上)

文章目錄 📕1. UDP協議??1.1 UDP的特點??1.2 基于UDP的應用層協議 📕2. TCP協議??2.1 TCP協議段格式??2.2 TCP協議特點之確認應答??2.3 TCP協議特點之超時重傳??2.4 TCP協議特點之連接管理??2.5 TCP協議特點之滑動窗口??2.6 TCP協議特點…

Lora訓練

一種大模型高效訓練方式&#xff08;PEFT&#xff09; 目標&#xff1a; 訓練有限的ΔW&#xff08;權重更新矩陣&#xff09; ΔW為低秩矩陣→ΔWAB&#xff08;其中A的大小為dr, B的大小為rk&#xff0c;且r<<min(d,k)&#xff09;→ 原本要更新的dk參數量大幅度縮減…

藍牙 5.0 新特性全解析:傳輸距離與速度提升的底層邏輯(面試寶典版)

藍牙技術自 1994 年誕生以來,已經經歷了多次重大升級。作為當前主流的無線通信標準之一,藍牙 5.0 在 2016 年發布后,憑借其顯著的性能提升成為了物聯網(IoT)、智能家居、可穿戴設備等領域的核心技術。本文將深入解析藍牙 5.0 在傳輸距離和速度上的底層技術邏輯,并結合面試…

Minio使用https自簽證書

自簽證書參考&#xff1a;window和ubuntu自簽證書_windows 自簽證書-CSDN博客 // certFilePath: 直接放在 resources 目錄下 或者可以自定實現讀取邏輯 // 讀取的是 .crt 證書文件public static OkHttpClient createTrustingOkHttpClient(String certFilePath) throws Excep…

汽車前縱梁焊接總成與沖壓件的高效自動化三維檢測方案

汽車主體結構件上存在很多安裝位&#xff0c;為保證汽車裝配時的準確性&#xff0c;主體結構件需要進行全方位的尺寸和孔位置精度檢測&#xff0c;以確保裝配線的主體結構件質量合格。 前縱梁焊接總成是車身框架的核心承載部件&#xff0c;焊接總成由多片鈑金沖壓件焊接組成&a…

F接口基礎.go

前言&#xff1a;接口是一組方法的集合&#xff0c;它定義了一個類型應該具備哪些行為&#xff0c;但不關心具體怎么實現這些行為。一個類型只要實現了接口中定義的所有方法&#xff0c;那么它就實現了這個接口。這種實現是隱式的&#xff0c;不需要顯式聲明。 目錄 接口的定…

cartographer官方指導文件說明---第3章 cartographer前端算法流程介紹

cartographer官方指導文件說明 第3章 cartographer前端算法流程介紹 3.1 Scan Match掃描匹配 掃描匹配&#xff08;Scan Matching&#xff09;是 Cartographer 中實現局部SLAM的核心技術&#xff0c;它通過優化算法將當前激光掃描數據對齊到子圖地圖中。下面從計算過程、數學…

汽車整車廠如何用數字孿生系統打造“透明車間”

隨著工業4.0時代的發展&#xff0c;數字孿生技術已成為現代制造業的重要利器。特別是在汽車整車廠&#xff0c;通過數字孿生系統的應用&#xff0c;能夠有效打造一個“透明車間”&#xff0c;實現生產過程的全面可視化與實時監控&#xff0c;提高生產效率&#xff0c;降低成本&…

openKylin適配RISC-V高性能服務器芯片,攜手睿思芯科共拓智算新藍海

3月31日&#xff0c;睿思芯科&#xff08;深圳&#xff09;技術有限公司&#xff08;簡稱“睿思芯科”&#xff09;2025春季新品發布會在深圳前海國際會議中心盛大舉行&#xff0c;作為RISC-V領域的年度盛事&#xff0c;此次發布會吸引了眾多業內目光。此次發布會上&#xff0c…

【已解決】lxml.etree.ParserError: Document is empty

本專欄解決日常生活工作中非快速找到解決方案的問題。 問題背景 在爬取某網站時&#xff0c;使用開源框架報錯&#xff1a;lxml.etree.ParserError: Document is empty 解決方案 1、多個搜索引擎中查找&#xff0c;建議都是對lxml的python源碼進行修改&#xff0c;不好用。…

mac電腦調試iphone真機safari網頁

mac電腦調試iphone真機safari網頁 start 本文主要是記錄一下如何調試蘋果手機上的safari的網頁 方法 1.蘋果手機打開 web檢查器 操作步驟&#xff1a; 打開設置搜索safari最底部“高級”開啟“網頁檢查器” 2.mac電腦打開safari 操作步驟&#xff1a; 先用數據線連接手機和…

opencv依據圖像類型讀取圖像像素點

Mat數據類型和通道對應的type()&#xff1a; 庫類型C1C2C3C4CV_8U081624CV_8S191725CV_16U2101826CV_16S3111927CV_32S4122028CV_32F5132129CV_64F6142230 通過c程序查看類型并讀取圖像像素點&#xff1a; switch (im->type()){case 0:std::cout << "at (&quo…

軟件架構的發展歷程——從早期的單體架構到如今的云原生與智能架構

軟件架構的發展歷程是技術演進與業務需求相互驅動的結果&#xff0c;從早期的單體架構到如今的云原生與智能架構&#xff0c;每一步都在突破系統的可擴展性、靈活性和效率邊界。以下是其核心發展脈絡及未來趨勢的全景解析&#xff1a; 一、發展歷程&#xff1a;從單體到智能的…

Oracle 基礎語句大全:從數據定義到復雜查詢

一、DDL&#xff08;數據定義語言&#xff09;&#xff1a;定義數據庫結構 1. 創建表&#xff08;CREATE TABLE&#xff09; -- 語法格式 CREATE TABLE [schema.]table_name (column1 datatype [CONSTRAINT constraint1],column2 datatype [DEFAULT default_value],-- 表級約…

【學習筆記】鎖+死鎖+gdb調試死鎖

【學習筆記】鎖死鎖gdb調試死鎖 一、互斥鎖&#xff08;std::mutex&#xff09; 最基本的鎖類型&#xff0c;提供排他性訪問&#xff0c;同一時間僅允許一個線程持有鎖。 #include <iostream> #include <mutex> #include <thread>std::mutex mtx; // 全局…

Flutter中將bytes轉換成XFile對象上傳

在Flutter中將字節數據(bytes)轉換為XFile對象并上傳可以通過以下步驟實現&#xff1a; 1.字節數據轉臨時文件 首先需要將字節數據寫入臨時文件&#xff0c;可以使用dart的File類實現&#xff1a; final tempDir await getTemporaryDirectory(); final file File(${tempDi…