2016-12-04 2 views
0

Я хотел бы построить набор данных по его категориям, используя геометрические фигуры, такие как круг, треугольник и квадрат для представления категории 1 и цвета для представления категории 2 . выходной сигнал будет иметь различное сочетание геометрических форм и цветов и легенды были бы перечислены атрибуты категорий отдельно, а именно:Графики рассеяния в Пандах: Участок по категориям с различными комбинациями цветов и фигур

круг = а
треугольник = Ь
квадрат = с

красный = I
green = II
blue = III

В поисках решений Я нашел следующие сообщения, которые будут давать решения только для одной конкретной геометрической формы, имеющей один конкретный цвет.

Я пытался что-то придумаем с кодом одного из постов, но без успеха.

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() 

ответ

1

вы можете попробовать Этот блок код

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() 

Надеется, что это помогает.

+0

Можете ли вы, по крайней мере, пометить ответ как правильный, если он выполнит ваше требование. –

+0

Спасибо за вашу быструю помощь. Ваш ответ был действительно полезен. Проблема с представлением легенды остается. – Anjo

Смежные вопросы