首页 > 解决方案 > 有没有办法将一列十六进制代码传递到 Matplotlib/seaborn?

问题描述

鉴于我有一个 df 有 4 列,这样:

x = [1,3,6,8]
y = [7,4,8,7]
names = ['eggs','eggs','spam','spam']
hex = ['#76BB76','#76BB76','#7B8BFC','#7B8BFC']

其中名称中的每个元素在“十六进制”列中都有相应的代码。

到目前为止,我已经能够使用名称列对点进行分组,例如:

fg = seaborn.FacetGrid(data=df, hue='names')
fg.map(plt.scatter, 'x', 'y').add_legend()

在这里,我可以使用“十六进制”而不是“名称”,因为它们的分组方式相同。

但是,这会生成一个图,我可以在其中使用现有的 cmap(例如 cmap='viridis')为点着色。我想为这些点分配十六进制列中的自定义颜色,因为这将改善绘图的外观。在 matplotlib/seaborn 中是否有一种简单的方法可以做到这一点?

标签: pythondataframematplotlibplotseaborn

解决方案


在这种情况下,我只会使用scatter()带有c参数的 matplotlib:

fig, ax = plt.subplots()
for name, data in df.groupby('names'):
    ax.scatter(data.x, data.y, c=data.hex, label=name)
ax.legend(title='name')

matplotlib groupby 散点图


推荐阅读