基于Pandas数据框的Seaborn散点图,颜色基于第三列。

5
我有一个带有'groupname'、'result'和'temperature'列的pandas数据框。我已经绘制了一个Seaborn swarmplot,其中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')

1
据我所了解,seaborn 希望传递给 hue 的变量是分类变量而不是连续变量。有关在 seaborn 图中使用颜色映射的更多信息,请参见此问题及其答案 - Brendan
1个回答

3

2
当条件为真时,这仅适用于小数量的“温度”。如果“温度”采用许多值,则会出现问题。 - Brendan
1
真的,我过去也遇到了这些问题......我的解决方法是将值分成范围,并将这些范围类别作为色调。 BrendanCox,你有更好的想法吗? - Ivo Leist
1
我想这就是我要做的。我正在处理的数据大致上会有三个温度,所以我会将它们分组,精确值并不重要。如果有一种简单的方法可以根据温度值自动着色,那就太好了,但实际上对于我正在做的事情来说并不是必要的。 - Henry Gibson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接