如何为迭代添加的补丁添加颜色条?

How to add a colorbar for iteratively added patches?

我正在将矩形块迭代添加到根据传感器读数着色的绘图中。我将如何根据这些值向我的绘图添加颜色条?鉴于这些补丁未存储在数组中,我希望我需要定义一个跨越一系列值的颜色条,而与正在绘制的内容无关。我该怎么做?

您可以根据 ScalarMappable 给定颜色图和范数创建颜色条。范数需要值的最小值和最大值,并将输入值投影到 0,1.

范围内

下面的代码使用生成器来模拟读取测量值。为 0 到 20 之间的输入值创建范数。relimautoscale_view 确保为每个新矩形重新计算轴的限制。

import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
import numpy as np

def get_next_data():
    for i in range(20):
        value = np.random.uniform(0, 20)
        x = np.random.uniform(0, 30)
        y = np.random.uniform(0, 10)
        yield x, y, value

fig, ax = plt.subplots()
minv, maxv = 0, 20
cmap = plt.cm.coolwarm
norm = plt.Normalize(minv, maxv)
sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm)
sm.set_array([])
plt.colorbar(sm, ax=ax, label='Values')
for x, y, val in get_next_data():
    patch = Rectangle((x, y), 1, 1, color=cmap(norm(val)))
    ax.add_patch(patch)
    x += 1
    ax.relim()
    ax.autoscale_view()
    plt.pause(1)
plt.show()