График рассеяния Seaborn из цветов фрейма данных pandas на основе третьего столбца

У меня есть кадр данных pandas со столбцами «имя группы», «результат» и «температура». Я построил swarmplot Seaborn, где x='groupname' и y='result', который показывает данные результатов, разделенные на группы.

Что я также хочу сделать, так это раскрасить маркеры в соответствии с их температурой, используя цветовую карту, чтобы, например, самые холодные были синими, а самые горячие - красными.

Построить график очень просто:

import pandas as pd
import seaborn as sns
import matplotlib
import matplotlib.pyplot as plt

data = {'groupname': ['G0', 'G0', 'G0', 'G0', 'G1', 'G1', 'G1'], 'shot': [1, 2, 3, 4, 1, 2, 3], 'temperature': [20, 25, 35, 10, -20, -17, -6], 'result': [10.0, 10.1, 10.5, 15.0, 15.1, 13.5, 10.5]}
df = pd.DataFrame(data)

  groupname  shot  temperature  result
0        G0     1           20    10.0
1        G0     2           25    10.1
2        G0     3           35    10.5
3        G0     4           10    15.0
4        G1     1          -20    15.1
5        G1     2          -17    13.5
6        G1     3           -6    10.5

plt.figure()
sns.stripplot(data=results, x="groupname", y="result")
plt.show()

Но теперь я застрял, пытаясь раскрасить точки, я пробовал несколько вещей, например:

sns.stripplot(data=results, x="groupname", y="result", cmap=matplotlib.cm.get_cmap('Spectral'))

который, кажется, ничего не делает.

Также пробовал:

sns.stripplot(data=results, x="groupname", y="result", hue='temperature')

который окрашивает точки в зависимости от температуры, однако цвета случайны, а не сопоставлены.

Я чувствую, что, вероятно, есть очень простой способ сделать это, но не смог найти никаких примеров.

В идеале ищите что-то вроде:

sns.stripplot(data=results, x="groupname", y="result", colorscale='temperature')

person Henry Gibson    schedule 13.07.2019    source источник
comment
Насколько я понимаю, seaborn ожидает, что переменная, переданная hue, будет категориальной, а не непрерывной. См. этот вопрос и ответы на него для получения дополнительной информации об использовании цветовых карт на seaborn графиках.   -  person Brendan    schedule 13.07.2019


Ответы (1)


Здравствуйте, ключевое слово, которое вы ищете, это «палитра».

Ниже должно работать:

sns.stripplot(data=results, x="groupname", y="result", hue='temperature',palette="vlag")

http://man.hubwiz.com/docset/Seaborn.docset/Contents/Resources/Documents/generated/seaborn.stripplot.html

person Ivo Leist    schedule 13.07.2019
comment
Хотя это и правда, это работает только для небольшого количества temperature. Если temperature принимает много значений, это становится проблематичным. - person Brendan; 13.07.2019
comment
Правда, я сталкивался с этими проблемами и в прошлом... мой обходной путь для этого состоит в том, чтобы разбить значения на диапазоны и использовать эти категории диапазонов как оттенок. У тебя есть идея получше, @BrendanCox? - person Ivo Leist; 13.07.2019
comment
Думаю, я так и сделаю. Данные, с которыми я работаю, будут примерно при трех температурах, поэтому я сгруппирую их, точные значения не важны. Было бы неплохо, если бы был простой способ автоматического окрашивания на основе значения температуры, но на самом деле это не обязательно для того, что я делаю. - person Henry Gibson; 13.07.2019