1

我有大约 15 个系列,我希望针对一系列 X 值散点图。

但是,对于我系列中的某些值,我不希望绘制任何内容。是否有一个值可以用作虚拟对象,以便系列长度相同,但 matplotlib 不会绘制该点?

例如,如果我有[1,2,3,4,5,6,7,8,9]作为我的 x 轴,并且我在 Y 轴上有一个系列['a', 'b', 'c', 'd', 'e', foo, 'g','h','i']并且我不想针对 6 绘制 foo,我想将 foo 替换为一些不会被绘制的值。

我应该指出我的 x 和 y 值是日期时间。我没想到这是必要的信息,但似乎 NaN 可用于绘制浮点数,但不适用于日期时间。

4

4 回答 4

2

scatter将忽略该值numpy.nan(“不是数字”)。

>>> import matplotlib.pyplot as plt
>>> from numpy import nan
>>> x = range(5)
>>> y = [10, nan, 15, 14, 12]
>>> plt.scatter(x, y)
>>> plt.show()
于 2012-09-17T13:26:02.853 回答
0

您可以使用None

>>> import matplotlib.pyplot as plt
>>> plt.plot( [1,2,None,4,5],[1.1,2.2,3.3,4.4,5.5],'ro' )
[<matplotlib.lines.Line2D object at 0x29f6d50>]
>>> plt.show()
>>> 
于 2012-09-17T11:45:37.983 回答
0

所以为了解决这个问题,我使用 Nones 作为虚拟值,并创建

def find_indices(haystack, needle):
  return [i for i,x in enumerate(haystack) if needle == x]

def remove_at(xs, indices):
  return [x for i,x in enumerate(xs) if i not in indices]

进而

nones_at = find_indices(y_values, None)
x_values = remove_at(x_axis, nones_at)
y_values = remove_at(y_values, nones_at)
pyplot.plot(x_values, y_values)
于 2012-09-17T12:22:37.223 回答
0

如果您调用plot_date并传入visible=False,它将设置轴,就像绘制了系列一样,但会隐藏绘图,因此数据点不会显示。

如果有兴趣,您可以在multi_plot_data_with_dates 此处查看该方法 ——我相信我遇到了与解释相同的问题,并且此实现似乎可以解决问题。

于 2013-03-20T02:57:23.783 回答