我已经能够导入和绘制多列数据对同一x轴(时间)与图例,从csv文件使用genfromtxt显示在这个链接:
Matplotlib:直接从。csv
导入和绘制多个时间序列的图例如果csv文件中的所有单元格都包含数据,则上面的简单示例可以正常工作。然而,我的一些单元格有丢失的数据,和一些参数(列)只包括数据点每例如第二或第三次增量。
我想将所有参数绘制在与之前相同的时间轴上;如果一列中缺少一个或多个数据点,我希望绘图函数跳过该参数缺少的数据点,只在该参数可用的点之间绘制线。
此外,我试图找到一个通用的解决方案,它将自动绘制在上述风格直接从csv文件的任何数量的列,时间点,缺失的数据点等,当这些都不知道提前。
我已经尝试使用genfromtxt选项missing_values和filling_values,如下面的非工作示例所示;但是我想跳过缺失的数据点,而不是给它们赋值'0';在任何情况下,用这种方法,我似乎得到"ValueError:无法转换字符串为浮动"时,遇到丢失的数据点。
在同一图上根据时间绘制多个参数,同时处理偶尔或经常跳过的值,这对于科学界来说一定是一个相当常见的问题。
我将非常感谢任何关于使用genfromext的优雅解决方案的建议。
下面的非工作代码和演示数据。衷心感谢。
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()
我认为如果你在genfromtxt
命令中设置usemask =True
,它会做你想要的。可能不希望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())