Matplotlib:绘制数组中的nan元素

时间:2016-06-12 13:08:34

标签: python arrays matplotlib

我试图屏蔽数据数组,因此对于小于9的数组中的每个值,我希望将其设置为0.每个大于9的值我希望设置为1.这样当我乘以这个数组由我希望掩盖的数组,任何值将被乘以0(从而掩盖该数据)或(1)i..e,该数据将保留。希望这有道理......!

我想知道matplotlib如何将两个相等维度的数组一起绘制,比如数组中的一个元素是" nan"而另一个相应的元素是,42。matplotlib会自动不绘制这个值吗?

我认为它会,但我想在这一点上进行一些验证。非常感谢。

2 个答案:

答案 0 :(得分:1)

您可以如此简单地构建蒙版矩阵:

numpy.array((yourarray > 9), dtype=int)

您可以更改>到> =如果你想要的话。你写的关系并不清楚,如果值等于9,你没有定义该怎么做。

如果是None,NaN,inf值matplotlib将不会绘制该点。 例如

a = numpy.array([1,2,float('nan'),4])
b = numpy.array([40,41,42,43])
pl.plot(a,b,"o")
pl.show()

第三点不会被绘制。

答案 1 :(得分:1)

如果屏蔽数组,则可以正常绘制它们。如果添加两个蒙版数组,则会正确组合蒙版,如下例所示。我已生成0到20之间的随机数据,并在两个数组中屏蔽小于9的所有值。

import numpy as np
import matplotlib.pyplot as pl

# Create random data between 0 and 20.
a = np.random.rand(10, 10)*20
b = np.random.rand(10, 10)*20

# Mask all values less than 9.
a = np.ma.array(a, mask=a < 9.)
b = np.ma.array(b, mask=b < 9.)

# Plot a, b and the sum of both.
pl.subplot(131)
pl.pcolormesh(a, cmap=pl.cm.hot)
pl.subplot(132)
pl.pcolormesh(b, cmap=pl.cm.hot)
pl.subplot(133)
pl.pcolormesh(a+b, cmap=pl.cm.hot)
pl.show()