![](/img/trans.png)
[英]Y-axis is very crowded in matplotlib,How do I hide y-axis values?
[英]How do I selectively erase lines on a 2 y-axis subplot using matplotlib.(Python)
這是到目前為止我正在使用的代碼:
class Main:
app = QtGui.QApplication(sys.argv)
QtCore.QObject.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()"))
mainWidget = Gui.PointPredictorGui()
app.setActiveWindow(mainWidget)
mainWidget.show()
app.exec()
class PointPredictorGui(QtGui.QMainWindow):
def __init__(self, parent = None):
QtGui.QMainWindow.__init__(self)
frame = QtGui.QFrame()
hobo = QtGui.QHBoxLayout()
self.graphFigure = plt.Figure()
self.graphCanvas = FigureCanvas(self.graphFigure)
self.ax1 = self.graphFigure.add_subplot(111)
self.ax2 = self.ax1.twinx()
self.check1 = QtGui.QCheckBox("1")
self.check2 = QtGui.QCheckBox("2")
hobo.addWidget(self.graphCanvas)
hobo.addWidget(self.check1)
hobo.addWidget(self.check2)
frame.setLayout(hobo)
self.setCentralWidget(frame)
self.check1.stateChanged.connect(self.updateGraph)
self.check2.stateChanged.connect(self.updateGraph)
def updateGraph(self):
if self.check1.isChecked(): self.ax1.plot([1,2,3,4,5], [1,2,3,4,5], '--')
elif not self.check1.isChecked(): self.eraseMethod()
if self.check2.isChecked(): self.ax2.plot([1,2,3,4,5], [500,400,300,200,100], '--')
elif not self.check2.isChecked(): self.eraseMethod()
self.graphCanvas.draw()
def eraseMethod(self):
self.graphFigure.clear()
我試圖實現的結果是,我希望歸因於軸1或2的線根據是否選中相應的復選框來顯示。
兩者都選中時:
僅檢查第二個時:
你明白了。
我遇到的問題是,我似乎無法以正確的方式來實現我想做的事情,或者從哪個類中找出要使用的方法。 我所做的任何嘗試幾乎都不會導致任何變化,或者圖形部分會完全消失。
概括地說,這就是我要執行的操作:選中(完成)復選框時出現行取消選中(未完成)復選框時,行消失
此外,如果這是我需要采取的措施,則每次都可以重畫整個內容。
我想到了。
self.graphFigure = plt.figure()
fig, self.ax1 = plt.subplots()
self.ax2 = self.ax1.twinx()
self.graphCanvas = FigureCanvas(fig)
這是圖形小部件所需的設置,以使我嘗試做的事情成為可能。 為什么? 我不太確定,也許其他人可以回答。 我所知道的是,需要逐軸重繪圖形。 這是我的更新方法:
def updateGraph(self):
plt.sca(self.ax2)
plt.cla()
plt.sca(self.ax1)
plt.cla()
if self.check1.isChecked():
self.ax1.plot([1,2,3,4,5], [1,2,3,4,5], '--')
if self.check2.isChecked():
self.ax2.plot(self.line2.get_xdata(), self.line2.get_ydata(), '--')
self.graphCanvas.draw_idle()
順便說一下,這是self.line2是什么: self.line1 = matplotlib.lines.Line2D([1,2,3,4,5], [1,2,3,4,5])
我嘗試了兩種方式(列表和行對象)來查看是否出現任何奇怪的錯誤。 回到重新繪制圖形,我必須清除其中一個軸(plt.cla()),然后繪制到該坐標軸上(self.axis.plot(stuffx,stuffy)),然后重新繪制圖形。 為了確保每次調用更新方法時都更新兩個軸,我必須在兩個軸之間切換(plt.sca(要清除的軸)),然后重復該過程,然后重新繪制。
希望這對遇到此問題的其他人有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.