cuốn sách gpt4 ai đã làm

python - matplotlib 颜色图 : set_bad doesn't have an impact with collections

In lại Tác giả: Walker 123 更新时间:2023-11-28 17:03:57 30 4
mua khóa gpt4 Nike

我想使用 matplotlib 颜色映射的 set_bad 参数为 nan 值分配特定颜色。我创建了一个颜色图:

from matplotlib.colors import ListedColormap, BoundaryNorm

cmap = ListedColormap(['green', 'yellow', 'red'])
norm = BoundaryNorm([0, 20, 70, 100], cmap.N)

然后我将不好的颜色设置为黑色:

cmap.set_bad(color="k")

为了验证一切都按预期工作,我绘制了一个数组作为测试,它工作正常(左下象限为黑色):

import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
im = ax.imshow(np.array([[10, 50], [np.nan, 70]]), cmap=cmap, norm=norm)
fig.colorbar(im, ax=ax)

但是,如果我在集合中使用相同的颜色图,它就不起作用:

from matplotlib.collections import LineCollection
lc = LineCollection(([(0.1, 0.1), (0.1, 0.2)], [(0.2, .2), (0.2, .3)], [(0.3, .3), (0.3, .4)]))

lc.set_cmap(cmap)
lc.set_norm(norm)
lc.set_array(np.array([10, np.nan, 80]))

fig, ax = plt.subplots()
ax.add_collection(lc)
plt.draw()

中间的线有一个 nan z 值,应该是黑色的,但它变成了绿色。在这种情况下,nan 似乎被解释为 0。

这是错误还是有意为之?有谁知道是否可以以不同的方式将 set_bad 与颜色图一起使用?

P.S.: 我用 matplotlib 2.2 和 3.0 测试了这个,结果是一样的

câu trả lời hay nhất

如图this issue并由@EdSmith 评论,nan 实际上不是颜色图的有效输入。

ngược lại,nan 在范数和颜色图应用于 ScalarMappable 之前被屏蔽。此屏蔽需要为 Collection 手动完成。

.set_array(np.ma.masked_invalid([10., np.nan, 80.]))

完整示例:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap, BoundaryNorm
from matplotlib.collections import LineCollection

cmap = ListedColormap(['green', 'yellow', 'red'])
cmap.set_bad(color="k")
norm = BoundaryNorm([0, 20, 70, 100], cmap.N)

lc = LineCollection(([(0.1, 0.1), (0.1, 0.2)], [(0.2, .2), (0.2, .3)], [(0.3, .3), (0.3, .4)]))

lc.set_cmap(cmap)
lc.set_norm(norm)
lc.set_array(np.ma.masked_invalid([10., np.nan, 80.]))

fig, ax = plt.subplots()
ax.add_collection(lc)
plt.show()

hình ảnh

关于python - matplotlib 颜色图 : set_bad doesn't have an impact with collections,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52496817/

30 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress