news 2026/9/2 7:35:56

Plotly高级可视化库的使用方法(三)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Plotly高级可视化库的使用方法(三)

接(二)继续

同时绘制多条曲线

这是一个关于 Plotly 数据结构和高效绘图的经典问题。当我们想在 Plotly 中同时绘制DataFrame 的多列数据时,关键在于将我们的数据从**宽格式(Wide-Form)**转换为长格式(Long-Form),或者利用 Plotly Express(px)对宽格式数据的自动处理功能。

还是两种模式分开讨论:

方法一:使用 Plotly Express (px) (推荐)
Plotly Express 专门设计了处理宽格式数据的能力,这是最简单的方法。

核心:宽格式数据处理
当在px.line()px.scatter()中传入一个列名列表作为y参数时,Plotly Express 会自动将这些列视为不同的数据系列,并在一张图上绘制它们。

案例:绘制 5 个产品的销售趋势

假设有一个 DataFrame,其中Month是 X 轴,其余 5 列是您想要绘制的 Y 轴数据。

importplotly.expressaspximportpandasaspdimportnumpyasnp# 1. 准备宽格式数据 (Wide-Form Data)df=pd.DataFrame({'Month':pd.to_datetime(['2025-01','2025-02','2025-03','2025-04','2025-05']),'Product_A':np.random.randint(100,150,5),'Product_B':np.random.randint(90,140,5),'Product_C':np.random.randint(110,160,5),'Product_D':np.random.randint(80,130,5),'Product_E':np.random.randint(100,150,5),})# 2. 识别要绘制的所有数据列sales_columns=['Product_A','Product_B','Product_C','Product_D','Product_E']# 3. ✨ 关键步骤:将列名列表传入 y 参数fig=px.line(df,x='Month',# X轴数据y=sales_columns,# Y轴数据:传入一个包含多个列名的列表title='多产品销售趋势对比 (px 宽格式)',template='plotly_dark'# 可选:使用暗黑主题)fig.show()

结果:Plotly Express 会自动生成 5 条不同颜色的曲线,并在图例中以列名 (Product_AProduct_E) 区分。


方法二:手动转换为长格式(适用于 GO 模式和更复杂定制)

虽然px很方便,但如果您需要使用更底层的 Plotly Graph Objects (go) 进行精细定制,或者需要更灵活地处理数据,最好使用 Pandas 的melt()函数将数据转换为长格式(Long-Form)

核心:数据熔化 (Pandasmelt)

长格式数据结构中,所有数值都集中在一列,而用来区分这些数值的类别信息则集中在另一列。

MonthProductSales (Value)
2025-01A100
2025-02A120
2025-01B90
案例:手动转换并用px绘制
importplotly.expressaspximportpandasaspdimportnumpyasnp# 1. 准备宽格式数据(同上)df_wide=pd.DataFrame({'Month':['2025-01','2025-02','2025-03'],'Product_X':[100,120,110],'Product_Y':[80,95,105],})# 2. ✨ 关键步骤:使用 melt() 转换为长格式df_long=df_wide.melt(id_vars=['Month'],# 保持不变的 ID 列value_vars=['Product_X','Product_Y'],# 需要 "熔化" 的数据列var_name='Product',# 新的类别列名称value_name='Sales'# 新的数值列名称)# df_long 结构:Month, Product, Sales# 3. 使用 px.line 绘制长格式数据# 现在只需要告诉 px 哪个列用于颜色分组fig=px.line(df_long,x='Month',y='Sales',color='Product',# 自动按 'Product' 分组绘制两条线title='多产品销售趋势对比 (长格式)')fig.show()
  1. 最快、最简单:如果数据已经是宽格式(X 列 + 多 Y 列),直接使用px.line(df, x='X_col', y=['Y1', 'Y2', 'Y3', ...])
  2. 精细定制或复杂场景:如果需要使用go模式,或者数据结构比较复杂,请先使用 Pandasmelt()转换为长格式,再使用px.line(df_long, x='X_col', y='Value_col', color='Group_col')

plotly的保存成文件

Plotly 图表 (fig) 的导出方法主要依赖于fig.write_html()fig.write_image()

目标格式导出方法所需依赖
交互式 HTMLfig.write_html()无需额外依赖
静态图片/PDFfig.write_image()必须安装kaleido(pip install kaleido)

案例

# 保存为文件fig.write_html("my_chart.html",include_plotlyjs='cdn')# 获取字符串html_content=fig.to_html(full_html=False)嵌入网页用# 保存为 SVG 矢量图fig.write_image("my_chart.svg")# 保存为 PDF 矢量图fig.write_image("my_chart.pdf")# 保存 PNG,并设置 2 倍缩放因子提高清晰度fig.write_image("my_chart.png",scale=2)# 保存 JPEG,并指定尺寸fig.write_image("my_chart.jpeg",width=800,height=600)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 17:33:12

Avalonia跨平台入门第七十六篇之GIS自定义弹窗

前面简单玩了一下再玩GIS、离线地图、离线深色地图、GIS加载GeoJson和Shp、加载热力图、GIS聚合效果;今天再来分享WMS图层点击查询与自定义弹窗实现;1、先看最终效果:2、前端代码:3、后端Tapped事件:4、弹窗逻辑:5、弹窗跟随底图更新位置:最终简单的效果先这样吧;以…

作者头像 李华
网站建设 2026/9/3 3:16:30

Wechaty终极指南:从零开始构建高效聊天机器人的完整流程

Wechaty终极指南:从零开始构建高效聊天机器人的完整流程 【免费下载链接】wechaty 项目地址: https://gitcode.com/gh_mirrors/wec/wechaty 还在为聊天机器人开发的各种技术难题而头疼吗?Wechaty最新版本带来了革命性的开发体验升级,…

作者头像 李华
网站建设 2026/9/2 23:37:51

20、Linux 磁盘存储与打印操作全解析

Linux 磁盘存储与打印操作全解析 1. 磁盘存储基础 在 Linux 系统中,所有文件和目录都存储在 Linux 文件系统上,这是一种经过格式化以存储目录树的磁盘设备,如硬盘。Linux 系统的磁盘存储主要分为两种类型: - 固定存储 :指牢固连接到计算机系统,通常不用于临时移除(…

作者头像 李华
网站建设 2026/9/2 7:32:58

2025年软件开发公司TOP10权威榜单

在当今数字化时代,选择一家靠谱的软件开发公司至关重要,尤其是随着2025年临近,行业竞争加剧,口碑成为衡量企业可靠性的核心指标。根据行业报告显示,超过80%的企业在选择开发伙伴时,将客户评价和成功案例作为…

作者头像 李华
网站建设 2026/9/2 10:01:01

Vue 生命周期关键点

data() 初始化 → beforeCreate → created → beforeMount → mounteddata() 阶段:属性间不能相互依赖created() 阶段:数据已初始化,可以访问 this.fieldOptionsmounted() 阶段:DOM 已挂载,适合操作 DOM. 常见的陷阱和…

作者头像 李华
网站建设 2026/9/3 0:39:08

Excalidraw图层管理机制剖析,复杂图表也能井然有序

Excalidraw图层管理机制剖析,复杂图表也能井然有序 在一张越来越“满”的白板上,如何让新画的方框不被旧内容挡住?为什么拖出来的箭头总能巧妙地避开遮挡,稳稳连接两个模块?如果你用过 Excalidraw,可能已经…

作者头像 李华