2017-12-07 7 views
2

Ich habe einen Panda-Datenrahmen. Ich mache ein Scatter-Plot und versuche, die Daten basierend auf der Farbleiste zu kategorisieren. Ich habe es für die monatliche Klassifizierung und Qualitätseinstufung gemacht, wie im folgenden Beispielcode gezeigt.halbjährlich colorbar in matplotlib und pandas

a = np.random.rand(366) 
b = np.random.rand(366)*0.4 
index = (pd.date_range(pd.to_datetime('01-01-2000'), periods=366)) 
df = pd.DataFrame({'a':a,'b':b},index = index) 
plt.scatter(df['a'],df['b'],c = df.index.month) 
plt.colorbar() 

enter image description here

Und auch für Qualität:

plt.scatter(df['a'],df['b'],c = df.index.quarter) 
plt.colorbar() 

enter image description here

Meine Frage: Gibt es eine Möglichkeit um die Hälfte jährlich zu kategorisieren. zum Beispiel vom Monat 1-6 und 7-12 und auch nach Monat wie: 10-3 und 4-9 Vielen Dank und Ihre Hilfe/Vorschlag wird sehr geschätzt werden.

Antwort

2

Erstellen Sie eine benutzerdefinierte Funktion, um die Scatter-Funktion in ein color-Argument einzufügen. Ich machte ein Beispiel für die halbjährliche Teilung. Sie können für Ihre eigene Split-Funktion als Vorlage verwenden:

import numpy as np 
import pandas as pd 
import matplotlib.pylab as plt 

# if month is 1 to 6 then the first halfyear else the second halfyear 
def halfyear(m): 
    return 0 if (m <= 6) else 1 
# vectorize function to use with Series 
hy = np.vectorize(halfyear) 

a = np.random.rand(366) 
b = np.random.rand(366)*0.4 
index = (pd.date_range(pd.to_datetime('01-01-2000'), periods=366)) 
df = pd.DataFrame({'a':a,'b':b},index = index) 

# apply custom function 'hy' for 'c' argument 
plt.scatter(df['a'],df['b'], c = hy(df.index.month)) 
plt.colorbar() 

plt.show() 

enter image description here

Eine andere Möglichkeit, Lambda-Funktion zu verwenden, wie:

plt.scatter(df['a'],df['b'], \ 
c = df.index.map(lambda m: 0 if (m.month > 0 and m.month < 7) else 1)) 
+0

Dann, wie zwei Grundstück in derselben Figur zu verschmelzen? – bikuser

+0

https://matplotlib.org/examples/pylab_examples/subplots_demo.html 2. oder 3. Beispiel – Serenity

1

ich für eine Lösung entscheiden würden, die nicht vollständig abgeschnitten die monatlichen Informationen. Die Verwendung von Farben, die für die Monate ähnlich, aber unterscheidbar sind, erlaubt es, visuell sowohl nach einem halben Jahr als auch nach einem Monat zu klassifizieren.

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
import matplotlib.colors 

a = np.random.rand(366) 
b = np.random.rand(366)*0.4 
index = (pd.date_range(pd.to_datetime('01-01-2000'), periods=366)) 
df = pd.DataFrame({'a':a,'b':b},index = index) 

colors=["crimson", "orange", "darkblue", "skyblue"] 
cdic = list(zip([0,.499,.5,1],colors)) 
cmap = matplotlib.colors.LinearSegmentedColormap.from_list("name", cdic,12) 
norm = matplotlib.colors.BoundaryNorm(np.arange(13)+.5,12) 

plt.scatter(df['a'],df['b'],c = df.index.month, cmap=cmap, norm=norm) 
plt.colorbar(ticks=np.arange(1,13)) 

plt.show() 

enter image description here

+0

ja¡ das macht Sinn :) – bikuser

Verwandte Themen