matplotlib 根据属性使用不同的标记颜色绘制图表

lawou6xi  于 2023-03-09  发布在  其他
关注(0)|答案(1)|浏览(125)

我有一个df,看起来像这样:
| | 纬度|经度|代码_邮政|
| - ------|- ------|- ------|- ------|
| 无|四○二四四三五零|-8.443650|小行星3025 - 151|
| 第二章|四○六二六一三零|-8.645250|小行星3810 - 419|
| 1个|四○六二六一三零|-8.645250|小行星3810 - 498|
| 三个|四○六二六一三零|-8.645250|小行星3810 - 419|
我想用lat和lon坐标绘制一个图形(线图),其中标记面颜色根据cod_postal标签而不同。
我想到了这个:

color_labels=df['cod_postal'].unique()
    
#list of rgb
rgb_values=sns.color_palette('Set2', 8)

#Assign label to a rgb code
color_map=dict(zip(color_labels, rgb_values))

plt.plot(df['latitude'], df['longitude'], marker='o', mfc=df['cod_postal'].map(color_map))

但我得到一个错误消息:

ValueError: RGBA sequence should have length 3 or 4

我该怎么解决这个问题呢?我知道如果我是在绘制散点图,它会起作用,但对于我的情况来说,作为线图是必不可少的。
先谢了!
编辑:
为预期输出添加参考图片。

piwo6bdm

piwo6bdm1#

plt.plot()要求mfc参数为单色。
使用marker="o",看起来像是要创建一个散点图。如果是这种情况,你应该使用plt.scatter。现在你可以将多种颜色传递给c=参数(每个散点对应一种颜色)。

color_labels=df['cod_postal'].unique()
    
#list of rgb
rgb_values=sns.color_palette('Set2', 8)

#Assign label to a rgb code
color_map=dict(zip(color_labels, rgb_values))

fig, ax = plt.subplots()
# Create scatter plot, with one color 'cod_postal'
plt.scatter(df['latitude'], df['longitude'], c=df['cod_postal'].map(color_map).values)

  • 项目1、2和3具有相同的坐标,因此它们在图中重叠。*
  • 编辑提供的参考图像。*

我建议你分两步来做。首先按照上面的解释创建散点图。然后为连接的黑线创建线图。

plt.scatter(df['latitude'], df['longitude'], c=df['cod_postal'].map(color_map).values, zorder=3) 
plt.plot(df['latitude'], df['longitude'], c="k")

我调整了 Dataframe ,使图更有趣一些

df = pd.DataFrame([
    [40.244350, -8.443650, "3025-151"],
    [41.244350, -9.443650, "3025-151"],
    [42.244350, -8.443650, "3025-151"],
    [40.626130, -8.645250, "3810-419"],
    [41.626130, -8.645250, "3810-419"],
], columns=["latitude", "longitude", "cod_postal"])

相关问题