如何使用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
相关产品推荐
相关产品推荐

