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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…