2016-08-01 33 views
-1

Ich habe ein Diagramm in Python erstellt, aber ich muss jetzt einen Abschnitt des Diagramms nehmen und erweitern, indem Sie einen kleinen Bereich der Originaldaten verwenden, aber ich weiß nicht, wie Sie die Zeilennummer finden Die Ergebnisse, die den Bereich bilden oder wie ich mit diesen Ergebnissen ein Diagramm erstellen kann, bilden die Datei. Dies ist der Code, den ich für die Grafik habe:Schneiden eines Diagramms

import numpy as np 
import matplotlib.pyplot as plt 

#variable for data to plot 
spec_to_plot = "SN2012fr_20121129.42_wifes_BR.dat" 

#tells python where to look for the file 
spec_directory = '/home/fh1u16/Documents/spectra/' 
data = np.loadtxt(spec_directory + spec_to_plot, dtype=np.float) 

x = data[:,0] 
y = data[:,1] 

plt.plot(x, y) 
plt.xlabel("Wavelength") 
plt.ylabel("Flux") 
plt.title(spec_to_plot) 
plt.show() 

bearbeiten: Daten zwischen 3.5E + 3 und 9.9E + 3 in der ersten Spalte, ich brauche nur die Daten verwenden, um zwischen 5.5e + 3 und 6e +3, um einen anderen Graphen zu zeichnen, dies gilt jedoch nur für die erste Spalte. Hoffe das macht ein bisschen mehr Sinn? Python Version 2.7

+0

Das ist ziemlich unklar, aber ich wette, dass das Klicken auf das Lupensymbol in Ihrem Diagrammfenster und die Auswahl des gewünschten Teils genau das bewirken, was Sie suchen. – Julien

+0

Was ist unklar? Wie mache ich es klarer? –

+0

Wir können nicht wissen, welche Scheibe für Sie relevant ist, wenn Sie Ihr Problem nicht erklären ... – Julien

Antwort

0

Wenn ich Sie richtig verstanden hat, könnte man es auf diese Weise tun:

my_slice = slice(np.argwhere(x>5.5e3)[0], np.argwhere(x>6e3)[0]) 
x = data[my_slice,0] 
y = data[my_slice,1] 

np.argwhere(x>5.5e3)[0] ist der Index des ersten Auftretens von x>5.5e3 und wie weise für das Ende der Scheibe. (Vorausgesetzt, Ihre Daten sortiert)

Eine allgemeinere Art und Weise arbeiten, auch wenn die Daten nicht sortiert ist:

mask = (x>5.5e3) & (x<6e3) 
x = data[mask, 0] 
y = data[mask, 1] 
+0

Gerade versucht, dies und Fehler "x und y müssen gleiche erste Dimension" erschienen? –

+0

Sie müssen das gleiche Slicing auf "y" anwenden, siehe meine Bearbeitung. – Julien

+0

nicht Code in den Kommentaren, es ist nicht lesbar, lieber bearbeiten Sie Ihre Post ... Verwenden Sie nicht 'und', sondern '&', sie haben unterschiedliche Bedeutung. – Julien

0

gelöst durch die Verwendung

plt.axis([5500, 6000, 0, 8e-15]) 

Dank für die Hilfe.