读取由时间戳和数值组成的txt文件,里面是三条随时间变化的曲线,将曲线时间对齐并画出C++代码
时间: 2024-02-01 15:16:30 浏览: 62
c++ 读取txt文件流 绘制曲线
3星 · 编辑精心推荐
假设txt文件格式如下:
```
time1 value1_1 value1_2 value1_3
time2 value2_1 value2_2 value2_3
time3 value3_1 value3_2 value3_3
...
```
其中,每一行代表一个时间点和对应的三个数值。
以下是读取并对齐曲线的C++代码示例:
```cpp
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
struct DataPoint {
int time;
double value1;
double value2;
double value3;
};
int main() {
vector<DataPoint> data1, data2, data3;
ifstream infile("data.txt");
if (!infile) {
cerr << "Failed to open file." << endl;
return 1;
}
int time;
double value1, value2, value3;
while (infile >> time >> value1 >> value2 >> value3) {
data1.push_back({time, value1, 0, 0});
data2.push_back({time, 0, value2, 0});
data3.push_back({time, 0, 0, value3});
}
infile.close();
// 对时间戳进行排序
sort(data1.begin(), data1.end(), [](const DataPoint& a, const DataPoint& b) {
return a.time < b.time;
});
sort(data2.begin(), data2.end(), [](const DataPoint& a, const DataPoint& b) {
return a.time < b.time;
});
sort(data3.begin(), data3.end(), [](const DataPoint& a, const DataPoint& b) {
return a.time < b.time;
});
// 找到最早和最晚的时间戳
int start_time = min({data1.front().time, data2.front().time, data3.front().time});
int end_time = max({data1.back().time, data2.back().time, data3.back().time});
// 对齐时间戳
vector<DataPoint> aligned_data1, aligned_data2, aligned_data3;
for (int time = start_time; time <= end_time; time++) {
auto it1 = lower_bound(data1.begin(), data1.end(), DataPoint{time, 0, 0, 0}, [](const DataPoint& a, const DataPoint& b) {
return a.time < b.time;
});
auto it2 = lower_bound(data2.begin(), data2.end(), DataPoint{time, 0, 0, 0}, [](const DataPoint& a, const DataPoint& b) {
return a.time < b.time;
});
auto it3 = lower_bound(data3.begin(), data3.end(), DataPoint{time, 0, 0, 0}, [](const DataPoint& a, const DataPoint& b) {
return a.time < b.time;
});
if (it1 != data1.end() && it1->time == time) {
aligned_data1.push_back(*it1);
} else {
aligned_data1.push_back({time, 0, 0, 0});
}
if (it2 != data2.end() && it2->time == time) {
aligned_data2.push_back(*it2);
} else {
aligned_data2.push_back({time, 0, 0, 0});
}
if (it3 != data3.end() && it3->time == time) {
aligned_data3.push_back(*it3);
} else {
aligned_data3.push_back({time, 0, 0, 0});
}
}
// 画图
// ...
return 0;
}
```
此代码将读取txt文件中的数据,并将每个时间戳的三个数值分别存储在三个不同的vector中。然后,通过对时间戳进行排序和对齐,将三条曲线时间对齐。最后,可以使用第三方库(如Matplotlib)来绘制曲线图。
阅读全文