You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PyQtGraph在单个窗口中创建多轴并在同一轴绘制多条曲线(无需依赖PyQt)

如何使用PyQtGraph在单个窗口中创建多轴并在同一轴绘制多条曲线(无需依赖PyQt)

嘿,我来帮你搞定这个问题!你想要用PyQtGraph单独搭建窗口,不用依赖PyQt,同时实现单个窗口内多坐标轴布局,还能在同一个坐标轴上绘制多条曲线,对吧?咱们先拆解你之前代码的问题,再一步步实现目标。

先说说你之前代码的问题

  • 第一段代码里,pg.plot()这个函数每次调用都会自动创建一个新的独立窗口,所以你调用两次就弹出了两个窗口,这显然不是你要的效果。
  • 第二段代码用了MultiPlotWidget,但有两个关键错误:一是MultiPlotWidget需要添加的是PlotItem而非PlotWidget(后者本身就是带窗口的组件);二是你没有调用widget.show()来显示这个窗口,所以运行后啥都看不到。

正确的实现方案

我们可以用PyQtGraph自带的GraphicsLayoutWidget来做容器,它能在单个窗口里灵活布局多个绘图区域(也就是坐标轴),而且完全不需要依赖PyQt的其他组件。下面是完整的示例代码:

import pandas as pd
import pyqtgraph as pg

# 准备测试数据
a = [
    {'a': 5, 'b': 10, 'c': 5},
    {'a': 4, 'b': 0.5, 'c': 1},
    {'a': 3.5, 'b': 15, 'c': 9},
    {'a': 2.1, 'b': 5, 'c': 8},
    {'a': 0.1, 'b': 1, 'c': 5},
]
df = pd.DataFrame(a)

# 创建主窗口容器(单个窗口)
main_window = pg.GraphicsLayoutWidget(show=True, title="多轴绘图示例")

# 第一个绘图区域:在同一轴上绘制a和b两条曲线
plot1 = main_window.addPlot(title="曲线a & b")
# 绘制曲线a,指定颜色和名称
plot1.plot(df['a'].values, pen='r', name='曲线a')
# 绘制曲线b,指定颜色和名称
plot1.plot(df['b'].values, pen='b', name='曲线b')
# 显示图例
plot1.addLegend()

# 第二个绘图区域:绘制曲线c(单独的坐标轴)
main_window.nextRow()  # 切换到下一行布局
plot2 = main_window.addPlot(title="曲线c")
plot2.plot(df['c'].values, pen='g', name='曲线c')
plot2.addLegend()

# 启动事件循环,保持窗口打开
pg.exec()

代码关键点说明

  • pg.GraphicsLayoutWidget:这是PyQtGraph专门用来做绘图布局的容器,调用show=True会直接显示窗口,也可以后续手动调用main_window.show()。
  • addPlot():在容器里创建一个新的绘图区域(带完整坐标轴的PlotItem),可以设置标题、坐标轴标签等参数。
  • 同一个PlotItem多次调用plot():就能在同一坐标轴上添加多条曲线,通过pen指定颜色,name设置图例名称,再调用addLegend()就能显示图例。
  • nextRow():用来调整布局,把下一个绘图区域放到新的一行,你也可以用nextCol()放到同一行的右侧,实现更灵活的布局。

运行这段代码后,你会得到一个单独的窗口,里面有两个坐标轴区域:第一个区域同时显示曲线a和b,第二个区域显示曲线c,完全符合你的需求!

备注:内容来源于stack exchange,提问作者white.seolpyo.com

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 18:28:05