2016-03-19 16 views
0

Ich frage mich, wie kann ich Folgendes tun: Ich habe eine DataFrame mit Punkten und Klassen. Ich möchte alle Punkte zeichnen und eine Farbe für jede Klasse verwenden. Wie kann ich angeben, wie sich Klassen auf Farben in der Legende beziehen?Legende in Matplotlib

fig = plt.figure(figsize=(18,10), dpi=1600) 
df = pd.DataFrame(dict(points1 = data_plot[:,0], points2 = data_plot[:,1], \ 
      target = target[0:2000])) 
colors = {1: 'green', 2:'red', 3:'blue', 4:'yellow', 5:'orange', 6:'pink', \        
       7:'brown', 8:'black', 9:'white'} 
fig, ax = plt.subplots() 
ax.scatter(df['points1'], df['points2'], c = df['target'].apply(lambda x: colors[x])) 
+0

Können Sie minimal runnable Beispiel mit der Ausgabe, die Sie erhalten und die Ausgabe, die Sie möchten bekommen? Es wäre einfacher zu verstehen und Ihre Frage zu beantworten. –

Antwort

1

Der einfachste Weg, um Ihre Legende zu erhalten für jede Farbe separate Einträge haben (und es ist daher target Wert) ist ein separates Grundstück Objekt für jedentarget Wert zu schaffen.

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

x = np.random.rand(100) 
y = np.random.rand(100) 
target = np.random.randint(1,9, size=100) 

df = pd.DataFrame(dict(points1=x, points2=y, target=target)) 
colors = {1: 'green', 2:'red', 3:'blue', 4:'yellow', 5:'orange', 6:'pink', \ 
       7:'brown', 8:'black', 9:'white'} 
fig, ax = plt.subplots() 

for k,v in colors.items(): 
    series = df[df['target'] == k] 
    scat = ax.scatter(series['points1'], series['points2'], c=v, label=k) 

plt.legend() 

enter image description here

+0

Ich würde nicht "nur" sagen, nur das Einfachste;) Du kannst ein paar lustige Sachen mit Proxy-Künstlern machen. Siehe http://matplotlib.org/users/legend_guide.html#creating-artists-specifici-for-adding-to-the-legend-aka-proxy-artists – tacaswell

Verwandte Themen