Разные оттенки для каждой категории seaborn

#python #pandas #seaborn

#python #панды #seaborn

Вопрос:

Итак, я сделал полосу с помощью seaborn самым простым способом, с 5 различными категориями:

 sns.set_style('whitegrid')
plt.figure(figsize=(35,20))
sns.set(font_scale = 3)
sns.stripplot(df.speed, df.routeID, hue=df.speed>50, jitter=0.2, alpha=0.5, size=10, edgecolor='black')
plt.xlabel("Speed", size=40)
plt.ylabel("route ID", size=40)
plt.title("Velocity stripplot", size=50)
  

Теперь дело в том, что я хочу иметь разные оттенки для каждой категории, скажем, скорость более 50 км / ч для первой категории, 30 км / ч для второй и так далее. Возможно ли это? Я пытался сделать это, передавая список для оттенка:

 hue=([("ROUTE 30">50),("ROUTE 104">0)])
  

но это отмечает: SyntaxError: invalid syntax
Дело в том, что я хочу сделать все это сразу (поскольку наиболее очевидным ответом было бы построить отдельно) на одном и том же участке, как это можно сделать?

РЕДАКТИРОВАТЬ: я последовал предложенному ответу. Используется тот же код:

 plt.figure(figsize=(20,7))

my_palette = ['b' if x > 82 else 'g' for x in df.speed.values]

sns.stripplot(df.speed, df.routeID, jitter=0.2, alpha=0.5, size=8, edgecolor='black', palette = my_palette)
  

но получилось не так, как ожидалось:

введите описание изображения здесь

Я не понимаю, что здесь не так. Есть идеи?

Комментарии:

1. Мне не хватало запятой (сразу после «списка оттенков»), после чего сообщение изменилось на: ошибка типа: «>» не поддерживается между экземплярами «str» и «int»

2. Похоже, что ваш speed столбец не содержит чисел.

3. Не проблема со столбцом скорости. С первым сравнением в вашем примере: ("Route 30" > 50) вы сравниваете строку «Маршрут 30» с числом 50, что не имеет смысла.

Ответ №1:

Я предлагаю создать отдельный столбец df для точечного цвета. попробуйте это:

 # INITIAL DATA
n = 1000
df = pd.DataFrame()
df['speed'] = np.random.randint(10,90,n)
df['routeID'] = np.random.choice(['ROUTE_5','ROUTE_66','ROUTE_95','ROUTE_101'], n)

# set hue indices to match your conditions
df['hue'] = 'normal'  # new column with default value
df.loc[df.speed > 50, 'hue'] = 'fast'
df.loc[(df.routeID=="ROUTE_5") amp; (df.speed>40)|
       (df.routeID=="ROUTE_66") amp; (df.speed>30)|
       (df.routeID=="ROUTE_95") amp; (df.speed>60),
       'hue'] = 'special'
palette = {'normal':'g','fast':'r','special':'magenta'} 

sns.stripplot(x=df.speed, y=df.routeID, size=15,
    hue=df.hue, palette=palette)
  

введите описание изображения здесь

Комментарии:

1. Это вообще не сработало, но я полностью ценю помощь.

2. Привет, Джон Доу, я изменил пример решения — проверьте это. Это должно сработать.