matplotlib autoscale

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
franzk
User
Beiträge: 3
Registriert: Dienstag 31. Mai 2011, 19:40

Hallo,

Ich arbeite momentan an einem Programm das mir mit Hilfe von Matplotlib und Numpy / Scipy bestimmte Messreihen auswertet,
die Idee ist das man die Daten in Numpy einliest, mit Matplotlib plottet und anschließend mehrere Punkte im Graphen für die Auswertung bestimmt,
hierfür habe Ich mit dem Event handling von Matplotlib gearbeitet.

Das Programm ist soweit lauffähig und erfüllt seinen Job, allerdings tritt immer noch ein Problem auf.
Da bei einer Messreihe mehrere Punkte genommen werden, hab ich mit set_autoscale_on(False) die Neuskalierung der Daten ausgestellt, damit nicht jedes mal wenn ich
einen Plot aktualisiere aus dem aktuellen Bildbereich herausgezoomt wird.

Ich hab nun 2 event keys, einmal "x" um einen Messpunkt zu bestimmen und "r" um den letzen Messpunkt zu löschen,
das komische ist, dass wenn ich einen Messpunkt mit "r" lösche immer noch aus dem Bild herausgezoomt wird obwohl autoscale aus ist, wenn ich einen Datenpunkte mit "x"
festlege funktioniert das ganze ohne Probleme .

Hier mal der Teil meines Sourcecodes dazu:

Code: Alles auswählen

	def __call__(self, event):	
		if  event.key == "x":
			self.x.append(event.xdata)
			self.y.append(event.ydata)
			self.N = self.N + 1
			plt.axvline(event.xdata, ymin=0, ymax=600, linestyle="--")
			
			rest = event.xdata % 4.0e-7
			index = int((event.xdata-rest)/4.0e-7-1)		
			plt.plot(self.time[index],self.temp[index],'g^')
			
			self.history.append(False)
			if (self.N%2 == 0) and self.N <17:
				p1, p2 = self.x[len(self.x)-2],self.x[len(self.x)-1]
				if p1>p2:
					p1, p2 = p2, p1
				self.lgdata.append(self.linreg(p1,p2,self.messdaten))
				lgx=np.arange(p1-0.001,p2+0.001,0.001)
				ram=len(self.lgdata)-1
				plt.plot(lgx,self.lgdata[ram][0]*lgx+self.lgdata[ram][1],'r-')
				self.history.append(True)
			plt.xlabel('N = '+str(self.N))
			plt.draw()
		
		elif event.key == "r":
			if (self.remove == True) or (self.N>16): 
				if self.history[len(self.history)-1]==True:
					self.lgdata.pop()
					del self.dataplot.lines[len(self.dataplot.lines)-1]	
				elif self.history[len(self.history)-1]==False:
					self.x.pop()
					self.y.pop()
					self.N = self.N-1
					plt.xlabel('N = '+str(self.N))
					del self.dataplot.lines[len(self.dataplot.lines)-1]	
					del self.dataplot.lines[len(self.dataplot.lines)-1]	

				self.history.pop()
				plt.xlabel('N = '+str(self.N))
				plt.draw()	
Antworten