root读取,TXT文件并画图
时间: 2023-10-28 13:12:41 浏览: 80
这里提供一个Python的实现方案,需要使用到以下库:numpy、matplotlib。
假设需要读取的TXT文件名为data.txt,文件内容格式为一列数值,每行一个数值。以下是代码实现:
```
import numpy as np
import matplotlib.pyplot as plt
# 读取TXT文件
with open('data.txt', 'r') as f:
data = list(map(float, f.readlines()))
# 画图
plt.plot(data)
plt.show()
```
解释一下代码:
- `with open('data.txt', 'r') as f:` 打开TXT文件,并生成一个文件对象f,用with语句可以自动关闭文件,'r'表示读取模式。
- `data = list(map(float, f.readlines()))` 读取文件所有行数据,使用map函数将字符串转换为浮点数,最后生成一个浮点数列表data。
- `plt.plot(data)` 使用matplotlib库的plot函数画图,data作为y轴数据,x轴默认从0开始自动生成。
- `plt.show()` 将图像显示出来。
注意:以上代码仅适用于读取一列数值的TXT文件,如果需要读取多列数据,需要对代码进行相应的修改。
相关问题
用C++写root读取TXT文件并画图
下面是一个用C++和ROOT库读取TXT文件并画图的例子:
假设我们有一个名为data.txt的文件,其中包含以下数据:
```
1 2
2 4
3 6
4 8
5 10
```
我们要用ROOT库绘制这些数据的图形。
```c++
#include <iostream>
#include <fstream>
#include "TGraph.h"
#include "TCanvas.h"
using namespace std;
int main()
{
ifstream file("data.txt"); // 打开数据文件
if (!file) {
cerr << "Can't open data file!" << endl;
return 1;
}
double x, y;
vector<double> xs, ys;
while (file >> x >> y) { // 读取文件中的数据
xs.push_back(x);
ys.push_back(y);
}
TGraph *graph = new TGraph(xs.size(), &xs[0], &ys[0]); // 创建图形对象
TCanvas *canvas = new TCanvas("canvas", "Graph", 800, 600); // 创建画布对象
graph->Draw("ALP"); // 绘制图形
canvas->SaveAs("graph.png"); // 保存图形为png文件
return 0;
}
```
上面的代码首先打开数据文件,然后读取文件中的数据并将其存储在向量xs和ys中。然后,它使用TGraph类创建一个图形对象,并使用TCanvas类创建一个画布对象。最后,它将图形绘制在画布上,并将图形保存为PNG文件。
编译和运行代码:
```
g++ -o main main.cpp `root-config --cflags --glibs`
./main
```
运行后,将生成一个名为graph.png的PNG文件,其中包含从数据文件绘制的图形。
用cernroot读取文件并直方画图
首先需要安装 ROOT,可以参考官方文档进行安装:https://root.cern/install/
假设我们有一个名为data.txt的数据文件,可以使用以下代码读取并绘制直方图:
```cpp
#include <TFile.h>
#include <TCanvas.h>
#include <TH1F.h>
void read_and_draw() {
// 读取数据文件
TFile *f = TFile::Open("data.txt", "READ");
// 从文件中获取数据
TTree *t = (TTree*)f->Get("tree");
// 创建直方图
TH1F *hist = new TH1F("hist", "Histogram", 100, 0, 10);
// 从树中填充直方图
Double_t data;
t->SetBranchAddress("data", &data);
for (Long64_t i = 0; i < t->GetEntries(); i++) {
t->GetEntry(i);
hist->Fill(data);
}
// 绘制直方图
TCanvas *c = new TCanvas("c", "Canvas", 800, 600);
hist->Draw();
c->SaveAs("hist.pdf");
// 释放内存
delete hist;
delete c;
delete t;
f->Close();
delete f;
}
```
其中,假设数据文件中包含一个名为tree的树,树中有一个名为data的分支,存储着数据。我们使用TH1F类创建直方图,设定了100个bin,范围为0到10。然后从树中遍历数据,使用Fill方法填充直方图。最后使用TCanvas类绘制直方图,并保存为pdf格式。