You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matplotlib的PatchCollection中循环使用颜色?

解决PatchCollection自动分配colormap颜色的问题

你的代码里有两个关键问题导致所有圆圈颜色一致:

  • match_original=True会强制PatchCollection沿用每个Patch创建时的默认颜色(均为蓝色),完全忽略你设置的colormap。
  • 没有给每个Patch分配用于映射颜色的数值,matplotlib无法确定如何从colormap中提取不同颜色。

修改后的代码如下:

from matplotlib.collections import PatchCollection
import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots(figsize=(5,5))
coords = [
    (0, 0),
    (1, 2),
    (1, 3),
    (2, 2),
]
patches = [plt.Circle(coords[i], 0.1) for i in range(len(coords))]
# 生成与Patch数量匹配的索引数组,作为颜色映射的基准值
color_values = np.arange(len(patches))
# 移除match_original参数,添加array关联颜色映射值
patch_collection = PatchCollection(patches, cmap='tab20', array=color_values)
ax.add_collection(patch_collection)

# 可选:添加颜色条展示颜色与数值的对应关系
plt.colorbar(patch_collection, ax=ax)

ax.set_xlim(-1, 3)
ax.set_ylim(-1, 4)
plt.axis('equal')
plt.show()

关键修改说明:

  • 移除match_original=True:让PatchCollection优先使用你指定的colormap,而非Patch的原始默认颜色。
  • 添加array参数:传入长度与Patch数量一致的数组(这里用0到3的连续索引),每个元素对应一个Patch的颜色映射基准,matplotlib会自动根据这个数组从tab20色表中提取对应颜色。
  • 若需自定义颜色映射的数值范围,可配合norm参数和Normalize类调整,例如norm=plt.Normalize(vmin=0, vmax=10)。

内容的提问来源于stack exchange,提问作者gameveloster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 16:55:26