我已经能够使用genfromtxt从csv文件导入和绘制多个数据列与图例相同的x轴(时间),如下所示:
Matplotlib: Import and plot multiple time series with legends direct from .csv
如果csv文件中的所有单元格都包含数据,则上述简单示例可以正常工作。但是我的一些单元格中缺少数据,而某些参数(列)仅包括每个单元格的数据点。第二次或第三次增量。
我想像以前一样在同一时间轴上绘制所有参数;如果缺少列中的一个或多个数据点,我希望绘图函数跳过该参数的缺失数据点,并且只绘制可用于该参数的点之间的线。
此外,我试图找到一个通用的解决方案,它会直接从csv文件中自动绘制上述样式,用于任意数量的列,时间点,缺少数据点等,当这些在提前。
我尝试过使用genfromtxt选项missing_values和filling_values,如下面的非工作示例所示;但是我想跳过丢失的数据点,而不是给它们分配值' 0&#39 ;;在任何情况下,这种方法我似乎得到" ValueError:无法将字符串转换为浮点数"遇到丢失的数据点时。
在同一地块上绘制多个时间参数,同时处理偶尔或经常跳过的值必须是科学界常见的问题。
我非常感谢使用genfromtxt提供优雅解决方案的任何建议。
下面的非工作代码和演示数据。非常感谢您的期待。
Demo data: 'Data.csv':
Time,Parameter_1,Parameter_2,Parameter_3
0,10,12,11
1,20,,
2,25,23,
3,30,,30
import numpy as np
import matplotlib.pyplot as plt
arr = np.genfromtxt('DemoData.csv', delimiter=',', dtype=None, missing_values='', filling_values = 0)
names = (arr[0])
for n in range (1,len(names)):
plt.plot (arr[1:,0],arr[1:,n],label=names[n])
plt.legend()
plt.show()
答案 0 :(得分:1)
我认为如果你在genfromtxt
命令中设置filling_values
,它会做你想要的。可能不希望arr = np.genfromtxt('DemoData.csv', delimiter=',', dtype=None, missing_values='', usemask=True)
设置
for n in range (1,len(names)):
plot(arr[1:,0][logical_not(arr[1:,n].mask)], arr[1:,n].compressed())
然后您可以使用以下内容进行绘图:
{{1}}