当前位置: 首页 > news >正文

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()渲染图形。

风险提示与免责声明
本文内容基于公开信息研究整理,不构成任何形式的投资建议。历史表现不应作为未来收益保证,市场存在不可预见的波动风险。投资者需结合自身财务状况及风险承受能力独立决策,并自行承担交易结果。作者及发布方不对任何依据本文操作导致的损失承担法律责任。市场有风险,投资须谨慎。

相关文章:

  • .docx 和 .doc 都是 Word 文档格式的区别
  • 迅捷CAJ转换器 1.7.4
  • java: 警告: 源发行版 17 需要目标发行版 17
  • 一个库,比如kott_tinymce ,想把的依赖库从kotti升级到kotti2 ,请问我是不是查找替换,把所有的kotti字符替换成kotti2就行了?
  • macOS - 根据序列号查看机型、保障信息
  • 深度学习N5周:Pytorch文本分类入门
  • 从番茄炒蛋到神经网络:解密AI模型的本质
  • Linux命令合集
  • 删除一个无进程使用却显示被使用的文件
  • .Net Framework 4/C# 进程和线程的使用
  • No module named ‘dbgpt_ext.rag.retriever.doc_tree‘
  • 【FineDance】一次训练后得到音乐和动作数据切片 (6790个文件)
  • MVCC(多版本并发控制)深度解析:原理、流程与实战应用
  • 数据融合平台是什么?如何搭建数据融合平台?
  • 如何轻松地将音乐从 iPhone 传输到 Mac?
  • npm/yarn报错“certificate has expired“
  • 【JupyterLab集成】GPU性能监控可视化组件
  • C++ 单例模式一种实现方式
  • 【系统规划与管理师第二版】1.2 信息技术及其发展
  • GitHub Copilot 是什么,怎么使用
  • 有免费网站推荐吗/营销宣传方式有哪些
  • 门户网站 管理系统/跨境电商培训机构哪个靠谱
  • 成都最好的网站建设公司/产品软文代写
  • 永康做网站的/百度首页百度一下
  • 中企动力常州分公司/seo关键词优化是什么意思
  • 包装纸箱怎么做网站/seo培训机构