2017-01-01 1 views
1
slov = {'People': {0: 'Ivan', 1: 'John', 2: 'Peter', 3: 'Ming'}, 'Country':{0: 'Russia', 1: 'USA', 2: 'USA', 3: 'China'},\ 
    'Height': {0: 181, 1: 175, 2: 174, 3: 173}} 

Я хотел бы видеть эту картинуЦвета для Python (Сиборн): цвета без добавления DataFrame

Colors for different countries

Но я не знаю, как это сделать. Я имею в виду, что я хочу иметь красный цвет для русских людей, зеленый цвет для людей США и желтый цвет для китайцев.

Мой attemp найти решение:

import numpy as np 
import seaborn as sns 
import matplotlib.pyplot as plt 
import pandas as pd 
sns.set(style="white") 

slov = {'People': {0: 'Ivan', 1: 'John', 2: 'Peter', 3: 'Ming'}, 'Country':{0: 'Russia', 1: 'USA', 2: 'USA', 3: 'China'},\ 
'Height': {0: 181, 1: 175, 2: 174, 3: 173}} 

obj = pd.DataFrame(slov) 

palette=["g", "b", "r"] 
obj['Color']='r' 

row_index = obj.Country == 'Russia' 
obj.loc[row_index, 'Color'] = 'r' 

row_index = obj.Country == 'USA' 
obj.loc[row_index, 'Color'] = 'g' 

row_index = obj.Country == 'China' 
obj.loc[row_index, 'Color'] = 'y' 


g = sns.factorplot(x="People", y="Height", data=obj, kind='bar', palette=obj['Color']) 

plt.show() 

А может быть, мое решение не очень хорошо. Я добавил цвет в DataFrame. Может быть, мы сможем написать это лучше. Возможно, мне не нужно добавлять цвет к моему DataFrame (это кажется не очень правильным.). Но как я могу решить свою задачу без добавления этих цветов в свой DataFrame?

ответ

1

Вы можете использовать map по dict:

d = {'Russia':'r', 'USA':'g','China':'y'} 
g = sns.factorplot(x="People", 
        y="Height", 
        data=obj, 
        kind='bar', 
        palette=obj['Country'].map(d)) 

plt.show() 

graph

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