pyqtgraph) 위젯 1개에 여러개의 그래프 그리기 예제(draw multiple graph in 1 widget example)

작성자: [관리자] 하얀설표

2024.12.21 17:51 (KST) 작성됨

2025.03.18 17:33 (KST) 수정됨






(03.18) 수정됨.

다음은 pyqtgraph의 plot function 코드다.

# pyqtgraph/__init__.py

def plot(*args, **kargs):
    mkQApp()
    pwArgList = ['title', 'labels', 'name', 'left', 'right', 'top', 'bottom', 'background']
    pwArgs, dataArgs = ({}, {})
    for k in kargs:
        if k in pwArgList: pwArgs[k] = kargs[k]
        else: dataArgs[k] = kargs[k]
    windowTitle = pwArgs.pop("title", "PlotWidget")
    w = PlotWidget(**pwArgs)
    w.setWindowTitle(windowTitle)
    if len(args) > 0 or len(dataArgs) > 0: w.plot(*args, **dataArgs)
    plots.append(w)
    w.show()
    return w

 

pyqtgraph.plot() 함수를 실행하면 plotwidget return하므로 위젯을 얻은 다음, .addItem() method로 위젯에 그래프를 추가할 수 있다.

PlotItem의 경우 PlotItem과 PlotDataItem 2개가 존재하는데, PlotDataItem을 사용해야 한다. PlotItem을 사용하는 방법은 모르겠다.

TypeError: QGraphicsWidget(parent: Optional[QGraphicsItem] = None, flags: Qt.WindowType = Qt.WindowFlags()): argument 1 has unexpected type 'list'

 

import pyqtgraph as pg

line = [10, 15, 12, 14, 11]
bar = [3, 2, 5, 9, 6]

widget = pg.plot(title='line with bar')
line = pg.PlotDataItem(line)
widget.addItem(line)
bar = pg.BarGraphItem(x=range(len(bar)), width=0.4, height=bar)
widget.addItem(bar)

pg.exec()

 

 

pyqtgraph 공식문서에서는 위젯에 그래프를 추가하는 방법을 다음과 같이 설명하고 있는데, vscode의 pylance가 plotWidget에서 plot이란 method를 찾지 못한다.

https://pyqtgraph.readthedocs.io/en/latest/getting_started/plotting.html

import pyqtgraph as pg
import numpy as np
x = np.arange(1000)
y = np.random.normal(size=(3, 1000))
plotWidget = pg.plot(title="Three plot curves")
for i in range(3):
    plotWidget.plot(x, y[i], pen=(i,3))  ## setting pen=(i,3) automaticaly creates three different-colored pens

 

해당 방법은 .plotItem.plot() method를 사용하는 것과 같은데,

import pyqtgraph as pg
import numpy as np
x = np.arange(1000)
y = np.random.normal(size=(3, 1000))
plotWidget = pg.plot(title="Three plot curves")
for i in range(3):
    plotWidget.plotItem.plot(x, y[i], pen=(i,3))  ## setting pen=(i,3) automaticaly creates three different-colored pens

 

그 이유는 PlotWidget에서 __getattr__ method에서 self.plotItem의 attr을 탐색하여 가져오기 때문인 것으로 보인다.

# pyqtgraph/widgets.py

class PlotWidget(GraphicsView):
    ...
    def __getattr__(self, attr):  ## implicitly wrap methods from plotItem
        if hasattr(self.plotItem, attr):
            m = getattr(self.plotItem, attr)
            if hasattr(m, '__call__'):
                return m
        raise AttributeError(attr)
     ...

 

 






추천 (0)


글 목록

댓글을 달 수 없는 게시물입니다.


"분류없음" 카테고리의 #pyqtgraph 예제 관련 게시물