2017-06-18 4 views
1

Dies ist eine Folge von this question.pyqtgraph: richtet die Ticks der x-Achsen in verschiedenen Plots aus

Die Frage ist, wie die X-Achsen-Skalierung von mehreren Pyqtgraphen anzupassen ist, wenn einer der Diagramme neu skaliert wird. Mein Wunschergebnis ist, dass die Ticks aller Graphen perfekt ausgerichtet sind, so dass Sie den Inhalt beider Graphen direkt vergleichen können.

Die gegebene Antwort archiviert diese Aufgabe, die Graphen auf Änderungen neu zu skalieren, aber wenn der Inhalt der Graphen unterschiedlich ist, neigt die y-Achsenbeschreibung dazu, von unterschiedlicher Größe zu sein, die irgendwie alles vermasselt.

Zum Beispiel im unteren Bild habe ich das untere Diagramm so angepasst, dass es ungefähr den Bereich 0-100 abdeckt. Seltsamerweise zeigt das obere Diagramm ein größeres Intervall.

Haben Sie Ideen, wie Sie die Ticks während der Neuskalierung ausrichten können?

enter image description here

Quellcode des Beispiels:

import pyqtgraph as pg 
from pyqtgraph.Qt import QtCore, QtGui 
import numpy as np 
from pyqtgraph.dockarea import * 
import sys 


def onSigRangeChanged(r): 
    w1.sigRangeChanged.disconnect(onSigRangeChanged) 
    w2.sigRangeChanged.disconnect(onSigRangeChanged) 
    if w1==r: 
     w2.setRange(xRange=r.getAxis('bottom').range) 
    elif w2 == r: 
     w1.setRange(xRange=r.getAxis('bottom').range) 

    w1.sigRangeChanged.connect(onSigRangeChanged) 
    w2.sigRangeChanged.connect(onSigRangeChanged) 

app = QtGui.QApplication(sys.argv) 

win = QtGui.QMainWindow() 
area = DockArea() 
win.setCentralWidget(area) 
win.resize(1000,500) 
win.setWindowTitle('pyqtgraph example: dockarea') 


d1 = Dock("Dock1") 
d2 = Dock("Dock2") 
area.addDock(d1, 'bottom') 
area.addDock(d2, 'bottom', d1) 

w1 = pg.PlotWidget(title="Dock 1 plot") 
w1.plot(np.random.normal(size=100)*1e12) 
w1.plotItem.showGrid(x=True,y=True,alpha=1) 
d1.addWidget(w1) 

w2 = pg.PlotWidget(title="Dock 2 plot") 
w2.plot(np.random.normal(size=100)) 
w2.plotItem.showGrid(x=True,y=True,alpha=1) 
d2.addWidget(w2) 

w1.sigRangeChanged.connect(onSigRangeChanged) 
w2.sigRangeChanged.connect(onSigRangeChanged) 

win.show() 

sys.exit(app.exec_()) 

Antwort

1

Ich habe gerade die Antwort in this Frage.

Anstatt eine Verbindung zum sigRangeChanged Ereignis herzustellen, können wir die Achsenskalen direkt mit w2.setXLink(w1) verknüpfen. Natürlich müssen wir die Verbindungen zu sigRangeChanged entfernen oder die Waage wird in den Himmel schießen. Hier ist der Beispielcode:

import pyqtgraph as pg 
from pyqtgraph.Qt import QtCore, QtGui 
import numpy as np 
from pyqtgraph.dockarea import * 
import sys 

app = QtGui.QApplication(sys.argv) 

win = QtGui.QMainWindow() 
area = DockArea() 
win.setCentralWidget(area) 
win.resize(1000,500) 
win.setWindowTitle('pyqtgraph example: dockarea') 


d1 = Dock("Dock1") 
d2 = Dock("Dock2") 
area.addDock(d1, 'bottom') 
area.addDock(d2, 'bottom', d1) 

w1 = pg.PlotWidget(title="Dock 1 plot") 
w1.plot(np.random.normal(size=100)*1e12) 
w1.plotItem.showGrid(x=True,y=True,alpha=1) 
d1.addWidget(w1) 

w2 = pg.PlotWidget(title="Dock 2 plot") 
w2.plot(np.random.normal(size=100)) 
w2.plotItem.showGrid(x=True,y=True,alpha=1) 
w2.setXLink(w1) 
d2.addWidget(w2) 

win.show() 

sys.exit(app.exec_()) 
Verwandte Themen