2016-12-04 2 views
0

Ich möchte einen Datensatz nach Kategorien kategorisieren, wobei geometrische Formen wie Kreis, Dreieck und Quadrat für die Kategorie 1 und Farben für die Kategorie 2 stehen . der Ausgang würde unterschiedliche Kombination der geometrischen Formen und Farben und die Legende würde Liste der Attribute der Kategorien ist separat dh:Streudiagramme in Pandas: Plot nach Kategorie mit verschiedenen Farb- und Formkombinationen

Kreis eines
Dreieck = = b
square = c

rot = I
grün = II
blau = III

Auf der Suche nach Lösungen fand ich folgende Beiträge, die nur Lösungen für eine bestimmte geometrische Form mit einer bestimmten Farbe geben würde.

Ich habe versucht, etwas aus mit dem Code von einem der Pfosten, aber ohne Erfolg zu arbeiten.

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

np.random.seed(1983) 
num = 10 
x, y = np.random.random((2, num)) 
cat1 = np.random.choice(['a', 'b', 'c'], num) 
cat2 = np.random.choice(['I', 'II', 'III'], num) 
df = pd.DataFrame(dict(x=x, y=y, cat1=cat1, cat2=cat2)) 

groups = df.groupby(['cat1', 'cat2']) 

fig, ax = plt.subplots() 
for name, group in groups: 
ax.plot(group.x, group.y, marker='o', linestyle='', ms=12, label=name) 
ax.legend() 

plt.show() 

Antwort

1

können Sie versuchen, diesen Codeblock

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

#Create mapping dictionary that you want 
marker_dict = {'a':'o','b':'^','c':'s'} 
color_dict = {'I':'red', 'II':'green', 'III':'blue'} 

np.random.seed(1983) 
num = 10 
x, y = np.random.random((2, num)) 
cat1 = np.random.choice(['a', 'b', 'c'], num) 
cat2 = np.random.choice(['I', 'II', 'III'], num) 
df = pd.DataFrame(dict(x=x, y=y, cat1=cat1, cat2=cat2)) 

groups = df.groupby(['cat1', 'cat2']) 

fig, ax = plt.subplots() 
ax.margins(0.05) 
for name, group in groups: 
    marker = marker_dict[name[0]] 
    color = color_dict[name[1]] 
    ax.plot(group.x, group.y, marker=marker, linestyle='', ms=12, label=name,color=color) 
ax.legend() 

plt.show() 

Hoffe, es hilft.

+0

Können Sie die Antwort als korrekt markieren, wenn sie Ihren Anforderungen entspricht. –

+0

Vielen Dank für Ihre schnelle Hilfe. Ihre Antwort war sehr hilfreich. Das Problem mit der Legendendarstellung ist noch immer vorhanden. – Anjo