2016-04-08 2 views
0

Um wen auch immer,Python Visualisierungs- Assitance

mit einem Datensatz von wenigen Parametern (Wellenlänge und 4 Stokes-Parameter) gegeben worden dachte ich, dass ich alles richtig eingerichtet hatte. Das ist jedoch scheinbar, weil, wenn eine Kurve zu bekommen versucht, ich habe den Fehler

ValueError: x and y must have same first dimension

ich nicht ganz verstehen, was es bedeutet, von erster Dimension aber ich nehme an, ich parametrisierte etwas nicht in Ordnung habe. Ein bisschen Vorwort ist, dass ich eine Sammlung von Dateien gegeben habe, die Daten über Wellenlängen- und Stokes-Parameter haben (es gibt vier davon: I Q U V) und um Graphen zu bilden, die jeden Stoke-Parameter mit der Wellenlänge in Beziehung setzen.

-Code-weise ist es das, was wir bei

Basis

import matplotlib.pyplot as plt 
import numpy as np 
import scipy.constants as c 
from scipy.interpolate import spline 
import re 
split_on_spaces = re.compile(" +").split 

Array Listings

WL = np.array([]) 
SI = np.array([]) 
SQ = np.array([]) 
SU = np.array([]) 
SV = np.array([]) 

Daten suchen Sortierung

with open('C:\\Users\\Schmidt\\Desktop\\Python\\Homework_4\\CoolStuffLivesHere\\stokes_profiles_0.txt') as f: 
    for line in f: 
     data=split_on_spaces(line.strip()) 
     if len(data) == 0: 
      continue 
     if len(data) != 5: 
      sys.stderr.write("BAD LINE: {}".format(repr(line))) 
      continue 
     WL = np.append(WL, float(data[0])) 
     SI = np.append(SI, data[1]) 
     SQ = np.append(SQ, data[2]) 
     SU = np.append(SU, data[3]) 
     SV = np.append(SV, data[4]) 

Plotten

plt.plot(WL,SI) 
plt.show() 

Es Fehler ist wieder ValueError: x and y must have same first dimension. Was muss ich in meine Datei einfügen, um dies zu korrigieren? Zusätzlicher Bonus, aber nicht notwendig, wie würde ich 4 Graphen auf ein Display bekommen, wenn sie ausgeführt werden? For example, something like this.

Antwort

0

Es sieht also so aus, als hätten x und y nur eine Dimension, wenn ich Ihr Beispiel richtig gelesen habe. Wenn du eine der WL = np.append(WL, float(data[0]))-Anweisungen löschst, denke ich, dass dein Code funktioniert (aber ich kann es nicht wirklich testen, da ich keinen Zugriff auf deine Datei habe).

Wenn Sie eine der WL = np.append(WL, float(data[0])) löschen, kann ich Ihnen zumindest versichern, dass WL und SI die gleiche Länge haben (so hat es eine gute Chance, richtig zu plotten).

+0

Yeah ich bemerkte, dass, während ich dies tippte und das sofort editierte, muss vergessen haben, es in der Post minus. Auch das hat funktioniert, verzeih meine Dummheit – anabstudent

0

Ihr Problem besteht darin, dass Sie Arrays mit unterschiedlichen Größen (genauer gesagt verschiedenen Längen) an Matplotlib übergeben. Wenn Sie Ihren Code betrachten, sehen Sie, dass Sie versuchen, sowohl WL als auch SI zu plotten, die nicht die gleiche Länge haben.

Wenn Sie genau hinsehen, um Ihre „Datensortierung“ Abschnitt sehen Sie, dass Sie eine einzige Zeile Code kopiert haben:

WL = np.append(WL, float(data[0])) 
WL = np.append(WL, float(data[0])) 
SI = np.append(SI, data[1]) 

Da Sie die Singleton Append Methode verwenden, wird der Inhalt in data[0] beigefügten zu WL zweimal pro Schleife Iteration, noch wird nur an SI einzigen Zeit angefügt. Dies bedeutet, dass WL am Ende die doppelte Länge von SI und damit eine Dimensionsabweichung sein wird.

Mehrere Graphen in einer Figur können unter Verwendung der Matplotlib subplots() Methode wie beschrieben here durchgeführt werden.Ein einfaches Beispiel könnte wie folgt aussehen:

f, axarr = plt.subplots(2, sharex=True) 
axarr[0].plot(x, y) 
axarr[1].plot(x, z) 
+0

Ja, ich muss das nicht bemerkt haben, verzeih mir den Ausrutscher. Danke auch für den Link für mehrere Grafiken. – anabstudent

+0

Verwendung 'f, axarr = pltplots (2, 2) axarr [0, 0] .plot (WL, SI) axarr [0, 0] .set_title ('Achse [0,0]') axarr [0, 1] .scatter (WL, SQ) axarr [0, 1] .set_title ('Achse [0,1]') axarr [1, 0] .plot (WL, SU) axarr [ 1, 0] .set_title ('Axis [1,0]') axarr [1, 1] .scatter (WL, SV) axarr [1, 1] .set_title ('Achse [1,1]') ' es ergibt '' Was bedeutet das? – anabstudent

+0

Ich denke, du musst plt.show() aufrufen, sonst wirst du das Diagramm nicht sehen. Wenn Sie etwas sehen, das wie folgt aussieht 'versuchen Sie, ein Objekt ohne' _repr _() 'Methode auszudrucken, so dass es nur den Typ und die Adresse des Objekts ausgibt. Außerdem versuche ich meinen Ruf auf SO aufzubauen, also könntest du bitte die Antwort akzeptieren, wenn es für dich funktioniert hat? :) Vielen Dank! –

Verwandte Themen