2017-11-03 1 views
0

Ich zeichne einen Pandas DataFrame mit ein paar Zeilen, jede in einer bestimmten Farbe (spezifiziert durch rgb-Wert). Ich suche nach einer Möglichkeit, meinen Code lesbarer zu machen, indem ich die Plotlinienfarben direkt den Spaltennamen von DataFrame zuweise, anstatt sie nacheinander aufzulisten.Pandas Dataframe: Farben nach Spaltennamen plotten

Ich weiß, ich kann dies tun:

import pandas as pd 

df = pd.DataFrame(columns=['red zero line', 'blue one line'], data=[[0, 1], [0, 1]]) 
df.plot(colors = ['#BB0000', '#0000BB']) # red amd blue 

aber mit viel mehr als zwei Zeilen, würde ich wirklich die Farben der Lage sein, wie durch die Spaltenüberschrift angeben, wird der Code einfach zu machen zu halten . Wie dieses:

df.plot(colors = {'red zero line': '#FF0000', 'blue one line': '#0000FF'}) 

Das Farbenschlüsselwort kann nicht wirklich ein Verzeichnis obwohl sein. (Technisch gesehen ist es typ umgewandelt Liste, die eine Liste der Spaltenbeschriftungen ergibt.)

Ich verstehe, dass pd.DataFrame.plot erbt von matplotlib.pyplot.plot aber ich nicht in der Dokumentation des colors Schlüsselwort finden. Keine der Dokumentationen für die beiden Methoden listet ein solches Schlüsselwort auf.

+0

könnten Sie es nicht einfach zuerst in ein Wörterbuch einfügen und dann die Werte herausziehen? – 0TTT0

Antwort

2

Wenn Sie ein Wörterbuch erstellen, das die Spaltennamen den Farben zuordnet, können Sie die Farbliste im Handumdrehen mit einem Listenverständnis erstellen, wobei Sie nur die Farbe aus dem Spaltennamen get. Dadurch können Sie auch eine Standardfarbe für den Fall angeben, dass Sie eine Spalte verpasst haben.

import pandas as pd 
import matplotlib.pyplot as plt 

df = pd.DataFrame([[0, 1, 2], [0, 1, 2]], 
        columns=['red zero line', 'blue one line', 'extra']) 

color_dict = {'red zero line': '#FF0000', 'blue one line': '#0000FF'} 

# use get to specify dark gray as the default color. 
df.plot(color=[color_dict.get(x, '#333333') for x in df.columns]) 
plt.show() 

enter image description here

0

Sie die Reihenfolge der Spalten vor dem Plotten mit df[cols] angeben:

import pandas as pd 

cols = ['red zero line', 'blue one line', 'green two line'] 
colors = ['#BB0000', '#0000BB', 'green'] 
df = pd.DataFrame(columns=cols, data=[[0, 1, 2], [0, 1, 2], [0, 1, 3]]) 

df[cols].plot(colors = colors) 

example plot

Wenn Sie sicher, dass Spalten und Farben sein, sind grundsätzlich gepaart, Sie können immer nur zip vor der Zeit:

columns_and_colors = zip(cols, colors) 
df[cols].plot(colors = [cc[1] for cc in columns_and_colors]) 
Verwandte Themen