news 2026/7/14 14:04:25

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/7/14 1:24:34

AI市场舆情分析与量化风险:超越预测的2025年AI决策之道

在信息爆炸与市场瞬息万变的2025年,企业决策应该更依赖高管团队的直觉经验,还是能够拥抱一种全新的智能范式?这已不再是一个遥远的选择题,而是摆在每一位决策者面前的现实挑战。当市场的反馈周期从季度、月度被压缩至以天甚至小时…

作者头像 李华
网站建设 2026/7/13 1:41:42

Ivy统一AI框架:5步实现多框架代码无缝转换

在AI开发领域,你是否曾因不同框架间的代码迁移而头疼?Ivy统一AI框架正是为解决这一痛点而生。这个创新的开源项目让机器学习代码可以在PyTorch、TensorFlow、JAX、NumPy等主流框架间自由转换,真正实现了"一次编写,到处运行&q…

作者头像 李华
网站建设 2026/7/13 8:08:07

Socket.IO-Client-Swift完整开发指南:从零构建实时iOS应用

Socket.IO-Client-Swift完整开发指南:从零构建实时iOS应用 【免费下载链接】socket.io-client-swift 项目地址: https://gitcode.com/gh_mirrors/so/socket.io-client-swift 想要快速掌握iOS实时通信开发的核心技术吗?Socket.IO-Client-Swift为S…

作者头像 李华
网站建设 2026/7/14 1:24:31

LangFlow工作流导出为API接口的完整流程

LangFlow工作流导出为API接口的完整流程 在AI应用开发日益普及的今天,一个核心挑战浮出水面:如何让非程序员也能参与构建智能系统?数据科学家、产品经理甚至业务专家常常能清晰描述他们想要的逻辑——比如“先检索知识库,再用大模…

作者头像 李华
网站建设 2026/7/14 1:24:30

25、Linux 系统通信指南:网络连接、传真与调制解调器使用

Linux 系统通信指南:网络连接、传真与调制解调器使用 在当今数字化时代,计算机之间的通信变得至关重要。无论是连接互联网、收发传真还是使用调制解调器进行串行连接,都是常见的需求。本文将详细介绍在 Linux 系统中实现这些通信功能的方法。 1. 连接到互联网 连接 Linux…

作者头像 李华
网站建设 2026/7/14 1:24:29

22、Linux系统中的提醒工具使用指南

Linux系统中的提醒工具使用指南 在Linux系统中,当我们花费大量时间在工作上时,提醒功能就显得尤为重要。它能帮助我们合理安排时间,确保不会错过重要的事情。下面将介绍一些常见的提醒工具及其使用方法。 日期和时间显示 在Linux中, date 命令可以用来输出当前系统的日…

作者头像 李华