当使用字符串'nan'时,Matplotlib不打印任何内容

时间:2018-10-04 13:05:18

标签: python matplotlib

我想创建一个不连续的图,当变量为“ nan”时不打印任何内容。不幸的是,由于该图的y轴报告字符串值,因此当出现“ nan”时,该图仅在y轴上创建了“ nan”对勾。

例如:

enter image description here

我希望当'nan'出现时蓝色图不显示任何内容,而不是将nan视为字符串。

预先感谢

更新:

作为一个最小的示例,假设我写了:

x = [0,1,2,3,4,5,6,7,8]
y = ['Stairs',np.nan, 'Sitting', np.nan, 'Stairs','Falling','Falling','Standing',np.nan]
plt.plot(x,y)

它给了我以下结果:

enter image description here

我希望Nan不显示在情节上。有可能吗?

3 个答案:

答案 0 :(得分:1)

我会这样做:

y_List = ['sss', NaN, 'ddd', ....]
y_List_new = []
for i in y_List:
    if i != NaN:
        y_List_new.append(i)

,然后绘制y_List_new :) 编辑:我当然忘记了,您也需要为第一个列表(x个值)执行此操作,否则您将有太多的值

答案 1 :(得分:1)

要回答您的问题:如果您正在使用matplotlib的分类绘图功能(请参见gallery example),则不可能有不连续的绘图。如您所见,该代码会将您的nan转换为字符串。如果我是你的话,我可能会使用“无”来表示缺失的值,并以块的形式绘制这些部分:

x = [0,1,2,3,4,5,6,7,8]
y = ['Stairs', None, 'Sitting', None, 'Stairs', 'Falling', 'Falling', 'Standing', None]
curr_x = []
curr_y = []
for xval, yval in zip(x, y):
    if yval is None:
        if curr_x:
            ax.plot(curr_x, curr_y, "-bo")
            curr_x = []
            curr_y = []
    else:
        curr_x.append(xval)
        curr_y.append(yval)
ax.plot(curr_x, curr_y, "-bo")

enter image description here

答案 2 :(得分:1)

您可以使用整数索引进行绘制,然后相应地标记刻度线:

public static void main (String[] args) {

  Scanner in = new Scanner(System.in);

  int target = in.nextInt();
  while(in.hasNextInt()) {
     weights.insert(in.nextInt());
  }
  recKnapSack(target, 0);
}