У меня есть кадр данных 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')
seaborn
ожидает, что переменная, переданнаяhue
, будет категориальной, а не непрерывной. См. этот вопрос и ответы на него для получения дополнительной информации об использовании цветовых карт наseaborn
графиках. - person Brendan   schedule 13.07.2019