Plotly高级可视化库的使用方法(三)
2026/6/10 15:09:23 网站建设 项目流程

接(二)继续

同时绘制多条曲线

这是一个关于 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)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询