Python: Plot Liste der Tupel

Ich habe folgende Datensätze. Ich möchte python oder gnuplot verwenden, um die Daten zu zeichnen. Die Tupel sind von der Form (x, y). Die Y-Achse sollte eine Logachse sein. IE log (y). Ein Streudiagramm oder Line-Plot wäre ideal.

Wie kann man das machen?

[(0, 6.0705199999997801e-08), (1, 2.1015700100300739e-08), (2, 7.6280656623374823e-09), (3, 5.7348209304555086e-09), (4, 3.6812203579604238e-09), (5, 4.1572516753310418e-09)] 

  • Liste und Tupel verhalten sich anders
  • Schaffung eines Vertrauens Ellipsen in einem sccatterplot mit matplotlib
  • Verstehen von Datenformat in scikit-learn
  • Elements Arrangement für die Berechnung von Mittel in Python / NumPy
  • Python (scipy): Größenänderung einer spärlichen Matrix
  • Erhöhte Präzision von numpy.dot (Python)
  • Multiplizieren von Spaltenelementen mit spärlicher Matrix
  • Wie kann ich große (nicht riesige) Diktoniker in Python retten?
  • 4 Solutions collect form web for “Python: Plot Liste der Tupel”

    Wenn ich deine Frage richtig finde, könntest du so etwas machen.

     >>> import matplotlib.pyplot as plt >>> testList =[(0, 6.0705199999997801e-08), (1, 2.1015700100300739e-08), (2, 7.6280656623374823e-09), (3, 5.7348209304555086e-09), (4, 3.6812203579604238e-09), (5, 4.1572516753310418e-09)] >>> from math import log >>> testList2 = [(elem1, log(elem2)) for elem1, elem2 in testList] >>> testList2 [(0, -16.617236475334405), (1, -17.67799605473062), (2, -18.691431541177973), (3, -18.9767093108359), (4, -19.420021520728017), (5, -19.298411635970396)] >>> zip(*testList2) [(0, 1, 2, 3, 4, 5), (-16.617236475334405, -17.67799605473062, -18.691431541177973, -18.9767093108359, -19.420021520728017, -19.298411635970396)] >>> plt.scatter(*zip(*testList2)) >>> plt.show() 

    Was dir so etwas geben würde

    Bildbeschreibung hier eingeben

    Oder als Line-Plot,

     >>> plt.plot(*zip(*testList2)) >>> plt.show() 

    Bildbeschreibung hier eingeben

    EDIT – Wenn du einen Titel und Etiketten für die Achse hinzufügen möchtest, kannst du so etwas machen

     >>> plt.scatter(*zip(*testList2)) >>> plt.title('Random Figure') >>> plt.xlabel('X-Axis') >>> plt.ylabel('Y-Axis') >>> plt.show() 

    Das würde dir geben

    Bildbeschreibung hier eingeben

    In matplotlib wäre es:

     import matplotlib.pyplot as plt data = [(0, 6.0705199999997801e-08), (1, 2.1015700100300739e-08), (2, 7.6280656623374823e-09), (3, 5.7348209304555086e-09), (4, 3.6812203579604238e-09), (5, 4.1572516753310418e-09)] x_val = [x[0] for x in data] y_val = [x[1] for x in data] print x_val plt.plot(x_val,y_val) plt.plot(x_val,y_val,'or') plt.show() 

    Was produzieren würde:

    Bildbeschreibung hier eingeben

    Wie andere geantwortet haben, wird scatter() oder plot() das gewünschte Plot erzeugen. Ich schlage zwei Verfeinerungen auf Antworten vor, die schon hier sind:

    1. Verwenden Sie numpy, um die x-Koordinatenliste und die y-Koordinatenliste zu erstellen. Die Arbeit mit großen Datensätzen ist schneller in numpy als die Verwendung der Iteration in Python vorgeschlagen in anderen Antworten.

    2. Verwenden Sie pyplot, um die logarithmische Skala anzuwenden, anstatt direkt auf die Daten zu arbeiten, es sei denn, Sie wollen die Protokolle tatsächlich haben.

       import matplotlib.pyplot as plt import numpy as np data = [(2, 10), (3, 100), (4, 1000), (5, 100000)] data_in_array = np.array(data) ''' That looks like array([[ 2, 10], [ 3, 100], [ 4, 1000], [ 5, 100000]]) ''' transposed = data_in_array.T ''' That looks like array([[ 2, 3, 4, 5], [ 10, 100, 1000, 100000]]) ''' x, y = transposed # Here is the OO method # You could also the state-based methods of pyplot fig, ax = plt.subplots(1,1) # gets a handle for the AxesSubplot object ax.plot(x, y, 'ro') ax.plot(x, y, 'b-') ax.set_yscale('log') fig.show() 

    Ergebnis

    Ich habe auch ax.set_xlim(1, 6) und ax.set_ylim(.1, 1e6) , um es schön zu machen.

    Ich habe die objektorientierte Schnittstelle zu matplotlib verwendet. Weil es eine größere Flexibilität und explizite Klarheit bietet, indem sie Namen der erzeugten Objekte verwendet, wird die OO-Schnittstelle über die interaktive, statebasierte Schnittstelle bevorzugt.

    Du könntest auch Zip benutzen

     import matplotlib.pyplot as plt l = [(0, 6.0705199999997801e-08), (1, 2.1015700100300739e-08), (2, 7.6280656623374823e-09), (3, 5.7348209304555086e-09), (4, 3.6812203579604238e-09), (5, 4.1572516753310418e-09)] x, y = zip(*l) plt.plot(x, y) 
    Python ist die beste Programmiersprache der Welt.