首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >matplotlib共存: set_bad对集合没有影响

matplotlib共存: set_bad对集合没有影响
EN

Stack Overflow用户
提问于 2018-09-25 11:12:09
回答 1查看 3.1K关注 0票数 4

我想使用matplotlib的set_bad参数来为nan值指定一个特定的颜色。我创建了一个彩色地图:

代码语言:javascript
运行
复制
from matplotlib.colors import ListedColormap, BoundaryNorm

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

然后我把坏颜色设为黑色:

代码语言:javascript
运行
复制
cmap.set_bad(color="k")

为了验证一切正常工作,我绘制了一个数组作为测试,它可以工作(左下角是黑色的):

代码语言:javascript
运行
复制
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)

但是,如果我在集合上使用相同的颜色映射,它就无法工作:

代码语言:javascript
运行
复制
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测试了它,结果是一样的

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-26 01:04:10

本期中所示并由@EdSmith注释,nans实际上并不是colormaps的有效输入。

相反,nan在规范和颜色映射应用于ScalarMappable之前被蒙蔽。对于Collection,这种掩蔽需要手工完成。

代码语言:javascript
运行
复制
.set_array(np.ma.masked_invalid([10., np.nan, 80.]))

完整的例子:

代码语言:javascript
运行
复制
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()

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52496817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档