物理学者(ポスドク)による日々の研究生活のメモ書きです ( python/emacs/html/Japascript/シェルスクリプト/TeX/Mac/C言語/Linux/git/tmux/R/ポケモンGO)
1行のデータを読み込む方法は「猿でもわかるROOT」に書いてあった
この例はヒストグラムを作る方法だけど、自分が本当にやりたいのはTGraphでグラフを書くこと
今は#include <fstream>らしい
で、これを複数行のデータに置き換えたい
■ 参考 : Reading in data in columns from a file (C++)
ただ、このままコードを書いて実行すると、なぜか最後の行に空の行が追加されてしまい
配列が1つ多くなってしまった
それを手で消すような処理をしてもよかったけどなんか気持ち悪いので他の方法を探した
結局動かすのはROOTのうえなので、ROOTの機能でそんなのがないかどうか調べてみた
■ 参考 : 4.1 Read Graph Points from File
自分が必要だったのはまさにこれ
データのフォーマットに合わせて"%lg %lg"の部分は置き換える
3行なら%lgを増やす
(2019/03/28 追記)
読み込んだデータのサンプル点数をする方法は、
(2019/04/01 追記)
データの値を見たいときは
また、データを直接いじりたいときはGetXなどを使って取ってくる
もしこの読み込んだデータのy座標のデータを100倍したい場合は、
■ 参考 : TGraph and Scale()?
■ 複数のTGraphのデータをプロットしたいときはTMultiGraphを使う
最後のBuildLegend()はなくてもいい
もしつけたら、自動的にlegendを作成してくれる
legendに一覧される名前は
graph1->SetTitle("Graph legend1");
graph2->SetTitle("Graph legend2");
みたいにして付ける
■ 参考 : Multigraph legends
ツイート
この例はヒストグラムを作る方法だけど、自分が本当にやりたいのはTGraphでグラフを書くこと
#include <fstream>
TH1S h1(”name”, ”title”, 150, -10, 20);
ifstream data(”filename.dat”);
double x;
while (data >> x) h1.Fill(x);
data.close();
#include <fstream.h>という書き方は古いらしくてエラーが出たTH1S h1(”name”, ”title”, 150, -10, 20);
ifstream data(”filename.dat”);
double x;
while (data >> x) h1.Fill(x);
data.close();
今は#include <fstream>らしい
で、これを複数行のデータに置き換えたい
■ 参考 : Reading in data in columns from a file (C++)
double cola, colb, colc;
ifstream in(file);
while(!in.eof()){
in >> cola;
in >> colb;
in >> colc;
}
みたいにして、やると複数行読み込めるらしいifstream in(file);
while(!in.eof()){
in >> cola;
in >> colb;
in >> colc;
}
ただ、このままコードを書いて実行すると、なぜか最後の行に空の行が追加されてしまい
配列が1つ多くなってしまった
それを手で消すような処理をしてもよかったけどなんか気持ち悪いので他の方法を探した
結局動かすのはROOTのうえなので、ROOTの機能でそんなのがないかどうか調べてみた
■ 参考 : 4.1 Read Graph Points from File
自分が必要だったのはまさにこれ
データのフォーマットに合わせて"%lg %lg"の部分は置き換える
3行なら%lgを増やす
TGraphErrors *graph = new TGraphErrors("hoge.txt", "%lg %lg");
graph->SetMarkerStyle(kCircle);
graph->SetMarkerColor(2);
graph->SetTitle("simulation data dayo");
graph->GetXaxis()->SetTitle("Xaxis-no-label");
graph->GetYaxis()->SetTitle("Yaxis-no-label");
graph->Draw("AP");
c1->Print("hoge.png");
graph->SetMarkerStyle(kCircle);
graph->SetMarkerColor(2);
graph->SetTitle("simulation data dayo");
graph->GetXaxis()->SetTitle("Xaxis-no-label");
graph->GetYaxis()->SetTitle("Yaxis-no-label");
graph->Draw("AP");
c1->Print("hoge.png");
(2019/03/28 追記)
読み込んだデータのサンプル点数をする方法は、
graph->GetN()
(2019/04/01 追記)
データの値を見たいときは
graph->Print()
で画面に出力できるまた、データを直接いじりたいときはGetXなどを使って取ってくる
for(int index = 0;index < double >GetN();index++){
double x = graph->GetX()[index];
double xerr = graph->GetErrorX(index);
double y = graph->GetY()[index];
double yerr = graph->GetErrorY(index);
}
■ 参考 : TGraphErrorsを使いこなすdouble x = graph->GetX()[index];
double xerr = graph->GetErrorX(index);
double y = graph->GetY()[index];
double yerr = graph->GetErrorY(index);
}
もしこの読み込んだデータのy座標のデータを100倍したい場合は、
for (int i=0; i>graph->GetN();i++) graph>GetY()[i] *= 100;
■ 参考 : TGraph and Scale()?
■ 複数のTGraphのデータをプロットしたいときはTMultiGraphを使う
TMultiGraph *mg = new TMultiGraph();
mg->Add(graph1);
mg->Add(graph2);
mg->Draw("LP");
c1->BuildLegend();
mg->Add(graph1);
mg->Add(graph2);
mg->Draw("LP");
c1->BuildLegend();
最後のBuildLegend()はなくてもいい
もしつけたら、自動的にlegendを作成してくれる
legendに一覧される名前は
graph1->SetTitle("Graph legend1");
graph2->SetTitle("Graph legend2");
みたいにして付ける
■ 参考 : Multigraph legends
PR
この記事にコメントする
プロフィール
HN:coffee
職業:物理屋(自称)
趣味:映画鑑賞、登山
出身:大阪府の南の田舎
自己紹介:
import MyProfile
import coffee_pote from TWITTER
import amazonのほしい物リスト from WISH_LIST
print "先月子供が産まれました!"
# 最終更新 2022/10/25
職業:物理屋
趣味:映画鑑賞、登山
出身:大阪府の南の田舎
自己紹介:
import MyProfile
import coffee_pote from TWITTER
import amazonのほしい物リスト from WISH_LIST
print "先月子供が産まれました!"
# 最終更新 2022/10/25
カテゴリー
ブログ内検索
リンク
相互リンク募集中です
(Twitterにてお知らせください)
Demo scripts for gnuplot version 5 (gnuplotのさまざまなデモ画像と作り方がまとめられている、眺めているだけでできるようになった気分になれる)
gnuplotスクリプトの解説 (米澤進吾さんの個人ページ、gnuplotと言えばこのかた)
gnuplot のページ (Takeno Lab、うちのブログがリンクされていたのでリンク返し)
Twitterから映画の評価が分かる & 映画の鑑賞記録が残せる coco (映画の感想をまとめられるサイト、いつもお世話になっています)
Astronomy Picture of the Day Archive (天文や宇宙関連の最新の話題について画像とともにNASAが説明しているページ)
今日のほしぞら (任意の時刻の空で見える星を表示してくれる、国立天文台が管理している)
GNUPLOTとアニメーション (応用の項目の「見せてあげよう!ラピュタの雷を!!」あたりからすごすぎる)
読書メーター (読んだ本をリストできる便利なサイト)
flickr難民の写真置き場 (20XX年、flickrは有料化の炎に包まれた。あらゆるflickr無料ユーザーは絶滅したかに見えた。 しかし、tumblr移住民は死に絶えてはいなかった。)
教授でもできるMac OS X へのLaTeX, X11, gccのインストレーションと環境設定 (阪大の山中卓さんのwebページ、タイトルにセンスが溢れている、内容は超充実してる、特にTeX関連、学振DCとかPDの申請書類作成時にはお世話になっております)
英語論文執筆用の例文検索サービス (とんでもないものを見つけてしまった・・・・ arXivに収録されている 811,761報の 英語論文から,例文を検索するための検索エンジン)
Demo scripts for gnuplot version 5 (gnuplotのさまざまなデモ画像と作り方がまとめられている、眺めているだけでできるようになった気分になれる)
gnuplotスクリプトの解説 (米澤進吾さんの個人ページ、gnuplotと言えばこのかた)
gnuplot のページ (Takeno Lab、うちのブログがリンクされていたのでリンク返し)
Twitterから映画の評価が分かる & 映画の鑑賞記録が残せる coco (映画の感想をまとめられるサイト、いつもお世話になっています)
Astronomy Picture of the Day Archive (天文や宇宙関連の最新の話題について画像とともにNASAが説明しているページ)
今日のほしぞら (任意の時刻の空で見える星を表示してくれる、国立天文台が管理している)
GNUPLOTとアニメーション (応用の項目の「見せてあげよう!ラピュタの雷を!!」あたりからすごすぎる)
読書メーター (読んだ本をリストできる便利なサイト)
flickr難民の写真置き場 (20XX年、flickrは有料化の炎に包まれた。あらゆるflickr無料ユーザーは絶滅したかに見えた。 しかし、tumblr移住民は死に絶えてはいなかった。)
教授でもできるMac OS X へのLaTeX, X11, gccのインストレーションと環境設定 (阪大の山中卓さんのwebページ、タイトルにセンスが溢れている、内容は超充実してる、特にTeX関連、学振DCとかPDの申請書類作成時にはお世話になっております)
英語論文執筆用の例文検索サービス (とんでもないものを見つけてしまった・・・・ arXivに収録されている 811,761報の 英語論文から,例文を検索するための検索エンジン)
最新記事
(11/20)
(03/05)
(02/29)
(02/21)
(02/21)
(02/21)
(02/21)
(01/13)
(01/05)
(01/05)