我有一个带有'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')
seaborn
希望传递给hue
的变量是分类变量而不是连续变量。有关在seaborn
图中使用颜色映射的更多信息,请参见此问题及其答案。 - Brendan