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

Matplotlib循环绘制散点图时如何基于自定义颜色列表添加colorbar

原因说明

直接调用plt.colorbar()没有效果,是因为循环绘图时你给每批散点传入的是提前取好的固定RGB颜色值,整个绘图流程没有生成和自定义色卡绑定的可映射对象,colorbar找不到对应的颜色-数值映射规则,自然无法正常渲染。

实现方案

不需要改动你已有的循环绘图逻辑,只要在循环执行完成后,基于你自定义的colormap创建ScalarMappable对象传入colorbar即可,代码如下:

from matplotlib.cm import ScalarMappable

# 以下是你原有的绘图代码,不需要修改
cm = LinearSegmentedColormap.from_list('defcol', ["#000000", "#FF0000"])
trace_color = cm(np.linspace(0,1,cycles))
for k, color in zip(range(cycles),trace_color):
        lis = KL_rest[k::cycles]
        plt.scatter(scanpoints, lis, color = color, marker = '^', alpha = 0.9)

# 新增以下代码生成匹配的colorbar
# 构建和自定义色卡一致的可映射对象,数值范围和k的取值范围对齐
sm = ScalarMappable(cmap=cm, norm=plt.Normalize(vmin=0, vmax=cycles-1))
sm.set_array([])  # 不需要绑定实际数据,传空数组即可
# 生成色条,刻度直接对应range(cycles)的取值
cbar = plt.colorbar(sm, ticks=range(cycles))
# 如需自定义刻度文本可以放开下面这行修改
# cbar.set_ticklabels([f"cycle {i}" for i in range(cycles)])

运行后生成的色条会和你给散点分配的颜色完全对应:最底端的黑色对应k=0的分组,最顶端的红色对应k=cycles-1的分组,刻度和循环的k值一一匹配。如果cycles数值较大导致刻度过密,也可以按需调整ticks参数的间隔。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 02:51:58