Anzeige:
Ergebnis 1 bis 6 von 6

Thema: Python und MatPlotLib

  1. #1
    Registrierter Benutzer Avatar von maria_dolores
    Registriert seit
    09.05.2008
    Beiträge
    76

    Python und MatPlotLib

    Hallo zusammen,

    ich habe ein Problem mit der matplotlib und hoffe, ihr könnt mir helfen.
    Ich habe eine Datenbank, mache eine Abfrage und möchte das Ergebnis dieser Abfrage als Balkendiagramm mit Hilfe von matplotlib ausgeben.

    An sich ist ein solcher Plot (eine x-Achse und eine y-Achse) kein Problem. Ich möchte nun noch eine zweite y-Achse einfügen und auch weitere "Balken" einfügen, die sich auf die zweite y-Achse beziehen. Ich hoffe, dass das einigermaßen verständlich geschrieben ist. Im Internet habe ich auch schon was dazu gefunden (twinx), allerdings hat es bei mir bisher nicht funktioniert.

    Mein bisheriger Code sieht so aus:

    Code:
    import sqlite3
    import numpy as np
    import matplotlib.pyplot as plt
    
    connection = sqlite3.connect("MeineDatenbank")
    cursor = connection.cursor()
    cursor.execute("Select * from MeineTabelle")
    ThisTable = cursor.fetchall()
    Datum = []
    Zeit = []
    Distanz = []
    for entry in ThisTable:
          Datum.append(entry[0])
          Zeit.append(entry[1])
          Distanz.append(entry[2])
    print ThisTable
    
    fig = plt.figure()
    N = len(Datum)
    ind = np.arange(N)
    width = 0.35
    ax1 = fig.add_subplot(111)
    ax1.bar(ind, Zeit, width, color='grey')
    ax1.set_ylabel('Zeit', color='b')
    ax1.set_xlabel('YYYY/MM', color='black')
    ax1.set_xticks(ind + width)
    ax1.set_xticklabels(Datum)
    
    
    ax2 = ax1.twinx()
    M = max(Distanz)
    ind2 = np.arange(M)
    ax2.bar(ind, Distanz, width, color='red')
    ax2.set_ylabel('Distanz', color='r')
    
    plt.show()
    Im Anhang ist ein Beispielplot, wie ich ihn am liebsten hätte. Allerdings erscheinen bei mir immer nur ein "paar" Balken. Nie die von beiden y-Achsen.

    Habt ihr vielleicht eine Idee oder vielleicht sogar eine Lösung für mich?

    Gruß
    Isa

  2. #2
    Registrierter Benutzer Avatar von maria_dolores
    Registriert seit
    09.05.2008
    Beiträge
    76
    Ich habe es nun soweit geschafft, dass die beiden Balken geplottet werden. Allerdings nur übereinander. Für alle, die es interessiert, hier mein Code:

    Code:
    import sqlite3
    import matplotlib.pyplot as plt
    import numpy as np
    
    connection = sqlite3.connect("MeineDatenbank.db")
    cursor = connection.cursor()
    cursor.execute("SELECT * FROM MeineTabelle")
    ThisTable = cursor.fetchall()
    Datum = []
    Zeit = []
    Distanz =[]
    for entry in ThisTable:
        Datum.append(runtime[0])
        Zeit.append(runtime[1]/3600)
        Distanz.append(runtime[2]/1000)
    print ThisTable
    
    fig = plt.figure()
    ax1 = fig.add_subplot(111)
    N = len(Datum)
    ind = np.arange(N)
    width = 0.35
    ax1.bar(ind, Zeit, width, color='orange')
    ax1.set_ylabel('Time', color='black')
    ax1.set_xlabel('YYYY/MM', color='black')
    ax1.set_xticks(ind + width)
    ax1.set_xticklabels(Datum)
    
    ax2 = ax1.twinx()
    M = max(Distanz)
    ind2 = np.arange(M)
    ax2.set_xticklabels(Datum)
    
    ax2.bar(ind, Distanz, width, color='black')
    ax2.set_ylabel('Distanz', color='black')
    
    plt.show()
    Nun ist es noch nicht ganz perfekt. Ich möchte die Balken des Diagramms nicht übereinander, sondern nebeneinander haben.

    Hat da jemand eine Idee?
    Freue mich über jede Antwort.

    Gruß
    Isa

  3. #3
    Registrierter Benutzer Avatar von maria_dolores
    Registriert seit
    09.05.2008
    Beiträge
    76
    Ok, ich habe es doch noch rausgefunden. Man muss jeweils z ax(2).bar(...) etwas dazuschreiben:

    Code:
    ax.bar(..., align='center')
    ::::
    ax2.bar(..., align='edge')
    Nun verschiebt sich allerdings die Skalierung der x-Achse. Weiss jemand, wie man das hinbiegen kann?

    Irgendwie werde ich das Gefühl nicht los, dass dieses Thema hier in diesem Forum falsch ist.

    Gruß Isa

  4. #4
    Registrierter Benutzer Avatar von maria_dolores
    Registriert seit
    09.05.2008
    Beiträge
    76
    Also hier nochmal beide Screenshots, damit ihr vielleicht besser versteht was ich meine. Man achte besonders auf die x-Achse.

    Gruß Isa
    Geändert von maria_dolores (10-08-2010 um 15:28 Uhr)

  5. #5
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Ich tippe mal auf Leere Werte in der for Schleife.
    Eine if Abfrage könnte helfen.
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  6. #6
    Registrierter Benutzer Avatar von maria_dolores
    Registriert seit
    09.05.2008
    Beiträge
    76
    Ah ok. Kann man mit einer (oder mehreren) Schleife(n) auch das hier mit bar bewältigen?

    Gruß Isa
    Geändert von maria_dolores (11-08-2010 um 14:28 Uhr)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •