matplotlib 在值之间绘制直线忽略NaN值

8fsztsew  于 2023-11-22  发布在  其他
关注(0)|答案(1)|浏览(174)

我正在尝试用一堆数据绘制一个图,我想把一些有NaN的数据也绘制出来。我面临的问题是,我想用一条线穿过NaN值连接其他值。如果我们看一下图像,蓝色的点应该像橙子的点一样连接起来。如果没有NaN,我可以画出来,但是那样我就不能画出橙子的点了,我两样都需要


的数据
我将在这里留下给出该图的MWE的代码:

import numpy as np
import matplotlib.pyplot as plt
x = [1.0, 3.0, 5.0, 7.0, 10.0, 15.0, 20.0]
y= [1.0, 3.0, 5.0, 7.0, 10.0, 5.0, 20.0]
Arealval = [30.1, np.nan, 33.4, np.nan, 22.4, np.nan, 35.8]

plt.plot(x, Arealval, marker= 'X', ls=':')
plt.plot(x, y, marker='o', ls=':')

plt.show()

字符串
我想复制我的x值有两个列表,只保留其中一个列表上没有NaN的值,它可以工作(下面的例子和图片),但这对于一个大数据集来说是完全不切实际的。

import numpy as np
import matplotlib.pyplot as plt
x = [1.0, 3.0, 5.0, 7.0, 10.0, 15.0, 20.0]
y= [1.0, 3.0, 5.0, 7.0, 10.0, 5.0, 20.0]
x2 = [1.0, 5.0, 10.0, 20.0]
Arealval = [30.1, 33.4, 22.4, 35.8]

plt.plot(x2, Arealval, marker= 'X', ls=':')
plt.plot(x, y, marker='o', ls=':')

plt.show()



为了清楚起见,我不想插值或任何东西,只有一堆观察结果(有NaN的那些)和一堆预测结果(没有NaN的那些),我想把两者都画出来,但是通过让线更容易定位它们来赋予观察结果更多的重要性。
有没有办法在两点之间画一条线,忽略NaN?

m528fe3b

m528fe3b1#

一个选项可能是转换为numpy数组,然后从Arealval中删除NaN及其对应的x值。

x = np.array(x)
Arealval = np.array(Arealval)

plt.plot(x[~np.isnan(Arealval)], 
         Arealval[~np.isnan(Arealval)], 
         marker= 'X', ls=':')
plt.plot(x, y, marker='o', ls=':')

字符串
输出量:


的数据

相关问题