Seite 1 von 1

Matplotlibund das Darstellen von Klassen

Verfasst: Mittwoch 4. November 2015, 17:40
von Lienz20013
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

Re: Matplotlibund das Darstellen von Klassen

Verfasst: Mittwoch 4. November 2015, 19:23
von MagBen
Du könntest mehrere bar-Plots überlagern, für jede Farbe einen eigenen Plot:
http://matplotlib.org/examples/pylab_ex ... _demo.html

Re: Matplotlibund das Darstellen von Klassen

Verfasst: Donnerstag 5. November 2015, 12:47
von Lienz20013
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?