Matplotlibund das Darstellen von Klassen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Lienz20013
User
Beiträge: 88
Registriert: Freitag 26. September 2014, 14:42

Hi,

ich habe eine Frage und zwar habe ich Folgrndes Problem. Ich habe zwei Spalten A und B
A B
0 1
10 1
20 1
30 0
40 2
50 0
60 0
70 3
80 3
90 3
100 0
110 0
120 2
130 0
140 0
150 1

In der ersten Spalte steht eine Position also soll die y-Achse sein und in der zweiten Spalte eine Klassifizierung also 1 = gut, 2 = toll, 3 = super toll.

Nun möchte ich dies darstellen. Ich hätte gern als y Achse die Position (A) die x-Achse soll eine feste Breite 1 haben und überall wo B = 1 ist hätte ich gern einen horizontalen grünen streifen mit der länge 1 wo B = 2 ist einen blauen streifen B= 3 einen gelben.

Hab bis jetzt in matplotlib nichts geeignetes gefunden.

Ich hoffe das Problem wird klar?
Kann mir jemand helfen?

Danke im Vorraus
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Du könntest mehrere bar-Plots überlagern, für jede Farbe einen eigenen Plot:
http://matplotlib.org/examples/pylab_ex ... _demo.html
a fool with a tool is still a fool, www.magben.de, YouTube
Lienz20013
User
Beiträge: 88
Registriert: Freitag 26. September 2014, 14:42

Danke für deine Antwort. Ich hab das bis jetzt so gelöst wie folgt bin aber noch nicht zu frieden.
Also meine Daten sehen jetzt so aus:

7270;;;;3;;;;;
7280;;1;;;;;;;
7290;0;;;;;;;;
7300;;;2;;;;;;
7310;;;2;;;;;;
7320;;1;;;;;;;
7330;;1;;;;;;;
7340;;1;;;;;;;
7350;;;;3;;;;;
7360;;;;3;;;;;
7370;;;;3;;;;;
7380;;;;3;;;;;

Also hab jetzt mehere Spalten gemacht für jede Klasse eine.
Und das Skript sieht so aus:

Code: Alles auswählen

import matplotlib.pyplot as plt
from pylab import *
from matplotlib import gridspec
import pandas as pd
#==============================================================

data_ueber = []

with open('daten.csv',
                              'r') as uebersicht_file:
        data = (pd.io.parsers.read_csv(uebersicht_file, "rb",
                    delimiter=';',
                    usecols=[0,1,2,3,4,5],
                    names=(['Position','a','b','c','d','e'])))
               
        data_ueber.append(data)
data_ueber = pd.concat(data_ueber)

#==============================================================

fig2 = plt.figure()
    
fig2.set_size_inches( 10, 3)    
gs = gridspec.GridSpec(1,1)

pl =  plt.subplot(gs[0,0])
#pl.ticklabel_format(useOffset=False)
plt.autoscale(tight=True)
plt.gca().invert_yaxis()

bar_width = 20


pl.ticklabel_format(style = 'plain',scilimits=(0,0),axis = 'both')

plt.barh(data_ueber['Position'],data_ueber['b'],bar_width,color='purple',edgecolor = "none")

plt.barh(data_ueber['Position'],data_ueber['c'],bar_width,color='r',edgecolor = "none")

plt.barh(data_ueber['Position'],data_ueber['d'],bar_width,color='y',edgecolor = "none")

plt.barh(data_ueber['Position'],data_ueber['e'],bar_width,color='green',edgecolor = "none")    
         
plt.grid(True)
     
plt.ylabel(u'Tiefe [cm]')
Also die x-Achse gefällt mir nicht. Die länge der Balken ist mir ja eigentlich egal. Und das zweite Problem ist das ich für die Balken (Klasse) mit dem Wert 0 keine Farbe habe oder keinen Balken.
Hätte da noch jemand eien Idee?
Antworten