线条颜色作为 pandas 数据框中列值的函数

Line color as a function of column values in pandas dataframe

我正在尝试将 pandas 数据框的两列相互绘制,按第三列中的值分组。每行的颜色应由第三列确定,即每组一种颜色。

例如:

import pandas as pd
from matplotlib import pyplot as plt

fig, ax = plt.subplots()

df = pd.DataFrame({'x': [0.1,0.2,0.3,0.1,0.2,0.3,0.1,0.2,0.3],'y':[1,2,3,2,3,4,4,3,2], 'colors':[0.3,0.3,0.3,0.7,0.7,0.7,1.3,1.3,1.3]}) 

df.groupby('colors').plot('x','y',ax=ax)

如果我这样做,我最终会得到三条不同的线绘制 x 对 y,每条线都有不同的颜色。我现在想通过 'colors' 中的值来确定颜色。我如何使用渐变色图来做到这一点?

作为对 Prateek 非常好的答案的补充,一旦您根据所选调色板的强度分配了颜色(例如 Mako):

plots = sns.lineplot(data = df, x = 'x', y = 'y', hue = 'colors',palette='mako')

您可以使用 matplotlib 的函数添加颜色条 plt.colorbar() 并指定您使用的调色板:

sm = plt.cm.ScalarMappable(cmap='mako')
plt.colorbar(sm)

经过plt.show()后,我们得到合并后的输出:

看起来 seaborn 正在根据 hue 中的值自动应用颜色强度..

import pandas as pd 
from matplotlib import pyplot as plt

df = pd.DataFrame({'x': [0.1,0.2,0.3,0.1,0.2,0.3,0.1,0.2,0.3,0.1,0.2,0.3],'y':[1,2,3,2,3,4,4,3,2,3,4,2], 'colors':[0.3,0.3,0.3,0.7,0.7,0.7,1.3,1.3,1.3,1.5,1.5,1.5]})

import seaborn as sns

sns.lineplot(data = df, x = 'x', y = 'y', hue = 'colors')

给出:

您可以通过添加调色板参数来更改颜色,如下所示:

import seaborn as sns

sns.lineplot(data = df, x = 'x', y = 'y', hue = 'colors', palette = 'mako')
#more combinations : viridis, mako, flare, etc.

给出:

编辑(颜色图):

基于

的回答
import seaborn as sns

fig = sns.lineplot(data = df, x = 'x', y = 'y', hue = 'colors', palette = 'mako')

norm = plt.Normalize(vmin = df['colors'].min(), vmax = df['colors'].max())
sm = plt.cm.ScalarMappable(cmap="mako", norm = norm)
fig.figure.colorbar(sm)
fig.get_legend().remove()
plt.show()

给..

希望对您有所帮助..