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

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)
http://www.cnnetsun.cn/news/83134.html

相关文章:

  • AI市场舆情分析与量化风险:超越预测的2025年AI决策之道
  • Ivy统一AI框架:5步实现多框架代码无缝转换
  • Socket.IO-Client-Swift完整开发指南:从零构建实时iOS应用
  • LangFlow工作流导出为API接口的完整流程
  • 25、Linux 系统通信指南:网络连接、传真与调制解调器使用
  • 22、Linux系统中的提醒工具使用指南
  • 加密已死?不,它正在重生:为什么加密仍然是数据安全的终极堡垒
  • 【SS拓扑】基于移相控制的磁耦合谐振无线电能传输系统仿真附Simulink仿真
  • 26、负载均衡与高可用集群搭建指南
  • 告别单一工具化思维:如何构建覆盖全生命周期的零工管理体系?
  • 27、高可用性集群中ldirectord的配置与使用指南
  • 28、高可用集群与网络文件系统详解
  • 32、Mon与SNMP:网络监控的完美组合
  • Matplotlib 完全指南:从入门到精通
  • 沃虎 SFP 连接器核心优势解析:高速传输与场景适配双突破
  • 手把手教你用Excalidraw + AI快速绘制技术架构图(附GitHub项目地址)
  • Lostlife2.0任务系统智能化:LLama-Factory驱动动态任务生成
  • PyTorch 1.8与TensorFlow 2.5 GPU版本安装指南
  • LangFlow构建舆情分析系统的技术路径
  • 1.运算符重载
  • 照明系统设计
  • GPT-5.2 震撼发布:知识型工作超越人类专家的 AI 生产力革命!
  • 这些CTF,不仅学技术,还有巨额奖金!
  • 5个必学技巧!让你的点云可视化性能提升200%
  • 轻量级图表库uPlot完全指南:解锁高性能可视化新境界
  • 35、本地化与国际化文本函数详解
  • AdGuard Home配置优化实战指南:从新手到专家的5个关键步骤
  • 3步上手FLAN-T5 XL:从零开始掌握强大语言模型
  • 5分钟快速上手:awesome-godot项目带你玩转游戏开发
  • 深入Linux实时调度:5个关键机制彻底改变你的应用响应速度