基于第三列的 pandas 数据框颜色的 Seaborn 散点图

Hen*_*son 5 python matplotlib dataframe seaborn colormap

我有一个 pandas 数据框,其中包含“组名”、“结果”和“温度”列。我绘制了一个 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()
Run Code Online (Sandbox Code Playgroud)

但现在我被困在试图给点上色,我尝试了一些方法,例如:

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

这似乎没有做任何事情。

还尝试过:

sns.stripplot(data=results, x="groupname", y="result", hue='temperature')
Run Code Online (Sandbox Code Playgroud)

它确实根据温度对点进行着色,但是颜色是随机的而不是映射的。

我觉得可能有一种非常简单的方法可以做到这一点,但还没有找到任何例子。

理想情况下寻找类似的东西:

sns.stripplot(data=results, x="groupname", y="result", colorscale='temperature')
Run Code Online (Sandbox Code Playgroud)

小智 3

您好,您正在寻找的关键字是“调色板”

下面应该可以工作:

sns.stripplot(data=results, x="groupname", y="result", hue='temperature',palette="vlag")
Run Code Online (Sandbox Code Playgroud)

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

  • 虽然确实如此,但这仅适用于少量的“温度”。如果“温度”具有多个值,就会出现问题。 (2认同)