我想创建一个不连续的图,当变量为“ nan”时不打印任何内容。不幸的是,由于该图的y轴报告字符串值,因此当出现“ nan”时,该图仅在y轴上创建了“ nan”对勾。
例如:
我希望当'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)
它给了我以下结果:
我希望Nan不显示在情节上。有可能吗?
答案 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")
答案 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);
}