线条颜色作为 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()
给..
希望对您有所帮助..
我正在尝试将 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()
给..
希望对您有所帮助..