matplotlib:使用无作为值绘制Numpy数组
问题内容:
我有一个数组,看起来像:
k = numpy.array([(1.,0.001), (1.1, 0.002), (None, None),
(1.2, 0.003), (0.99, 0.004)])
我想绘制不是的值,(None, None)
并保留数组值的索引。也就是说,只要(None, None)
有价值,我都希望有一个差距。
完成后,我想作图
y = k[:,0] + k[:,1]
但我什至不能将数组加在一起。我尝试屏蔽该数组,但是丢失了原始k
数组的索引值。
一个最小的例子:
import matplotlib.pyplot as pyplot
import numpy
x = range(5)
k = numpy.array([(1.,0.001), (1.1, 0.002), (None, None),
(1.2, 0.003), (0.99, 0.004)])
Fig, ax = pyplot.subplots()
# This plots a gap---as desired
ax.plot(x, k[:,0], 'k-')
# I'd like to plot
# k[:,0] + k[:,1]
# but I can't add None
# Here I get rid of the (None, None) values so I can add
# But I lose the original indexing
mask = k != (None, None)
y = k[mask].reshape((-1,2))
ax.plot(range(len(y)), y[:,0]+y[:,1], 'k--')
问题答案:
您可以使用numpy.nan代替None。
import matplotlib.pyplot as pyplot
import numpy
x = range(5)
k = numpy.array([(1.,0.001), (1.1, 0.002), (numpy.nan, numpy.nan),
(1.2, 0.003), (0.99, 0.004)])
Fig, ax = pyplot.subplots()
# This plots a gap---as desired
ax.plot(x, k[:,0], 'k-')
ax.plot(range(len(y)), y[:,0]+y[:,1], 'k--')
或者您也可以屏蔽x值,这样索引在x和y之间保持一致
import matplotlib.pyplot as pyplot
import numpy
x = range(5)
y = numpy.array([(1.,0.001), (1.1, 0.002), (numpy.nan, numpy.nan),
(1.2, 0.003), (0.99, 0.004)])
Fig, ax = pyplot.subplots()
ax.plot(range(len(y)), y[:,0]+y[:,1], 'k--')
import matplotlib.pyplot as pyplot
import numpy
x = range(5)
k = numpy.array([(1.,0.001), (1.1, 0.002), (None, None),
(1.2, 0.003), (0.99, 0.004)])
Fig, ax = pyplot.subplots()
# This plots a gap---as desired
ax.plot(x, k[:,0], 'k-')
# I'd like to plot
# k[:,0] + k[:,1]
# but I can't add None
arr_none = np.array([None])
mask = (k[:,0] == arr_none) | (k[:,1] == arr_none)
ax.plot(numpy.arange(len(y))[mask], k[mask,0]+k[mask,1], 'k--')