熊猫 \- 每个点具有不同颜色图例的散点图

新手上路,请多包涵

从以下示例开始:

 fig, ax = plt.subplots()

df = pd.DataFrame({'n1':[1,2,1,3], 'n2':[1,3,2,1], 'l':['a','b','c','d']})

for label in df['l']:

    df.plot('n1','n2', kind='scatter', ax=ax, s=50, linewidth=0.1, label=label)

我得到的是以下散点图:

在此处输入图像描述

我现在正在尝试为四个点中的每一个设置不同的颜色。我知道我可以遍历一组,例如,列表中的 4 种颜色,例如:

 colorlist = ['b','r','c','y']

但由于我的真实数据集包含至少 20 个不同的点,我一直在寻找一种“颜色生成器”在其中循环。

原文由 Fabio Lamanna 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 594
2 个回答

以下方法将创建一个与数据框一样长的颜色列表,然后绘制一个带有每种颜色标签的点:

 import matplotlib.pyplot as plt
import matplotlib.cm as cm
import matplotlib.colors as colors
import numpy as np
import pandas as pd

fig, ax = plt.subplots()

df = pd.DataFrame({'n1':[1,2,1,3], 'n2':[1,3,2,1], 'l':['a','b','c','d']})

colormap = cm.viridis
colorlist = [colors.rgb2hex(colormap(i)) for i in np.linspace(0, 0.9, len(df['l']))]

for i,c in enumerate(colorlist):

    x = df['n1'][i]
    y = df['n2'][i]
    l = df['l'][i]

    ax.scatter(x, y, label=l, s=50, linewidth=0.1, c=c)

ax.legend()

plt.show()

在此处输入图像描述

原文由 tmdavison 发布,翻译遵循 CC BY-SA 3.0 许可协议

IIUC 你可以这样做:

 import matplotlib.pyplot as plt
from matplotlib import colors
import pandas as pd

colorlist = list(colors.ColorConverter.colors.keys())
fig, ax = plt.subplots()
[df.iloc[[i]].plot.scatter('n1', 'n2', ax=ax, s=50, label=l,
                         color=colorlist[i % len(colorlist)])
 for i,l in enumerate(df.l)]

颜色列表:

 In [223]: colorlist
Out[223]: ['m', 'b', 'g', 'r', 'k', 'y', 'c', 'w']

在此处输入图像描述

PS colorlist[i % len(colorlist)] - 应该始终保持在列表范围内

原文由 MaxU - stop russian terror 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题