如何为迭代添加的补丁添加颜色条?
How to add a colorbar for iteratively added patches?
我正在将矩形块迭代添加到根据传感器读数着色的绘图中。我将如何根据这些值向我的绘图添加颜色条?鉴于这些补丁未存储在数组中,我希望我需要定义一个跨越一系列值的颜色条,而与正在绘制的内容无关。我该怎么做?
您可以根据 ScalarMappable
给定颜色图和范数创建颜色条。范数需要值的最小值和最大值,并将输入值投影到 0,1
.
范围内
下面的代码使用生成器来模拟读取测量值。为 0 到 20 之间的输入值创建范数。relim
和 autoscale_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()
我正在将矩形块迭代添加到根据传感器读数着色的绘图中。我将如何根据这些值向我的绘图添加颜色条?鉴于这些补丁未存储在数组中,我希望我需要定义一个跨越一系列值的颜色条,而与正在绘制的内容无关。我该怎么做?
您可以根据 ScalarMappable
给定颜色图和范数创建颜色条。范数需要值的最小值和最大值,并将输入值投影到 0,1
.
下面的代码使用生成器来模拟读取测量值。为 0 到 20 之间的输入值创建范数。relim
和 autoscale_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()