Построение графиков с помощью Cern ROOT

Я пытаюсь создать график и сохранить его как изображение. Мне необходимо использовать ROOT. Я создал график с помощью

TGraph graph = TGraph(xvect, yvect);

но теперь я застрял в том, как сохранить это как png (или другой формат изображения). Я использую Linux-машину, если это имеет значение. Кроме того, если кто-нибудь знает ссылку на документацию, описывающую метод записи графика в файл изображения, я мог бы выяснить это сам оттуда, но мне пока не удалось найти это в документации.


person mrswmmr    schedule 10.06.2011    source источник
comment
Остерегайтесь микро-черных дыр.   -  person Emile Cormier    schedule 11.06.2011
comment
Использование неопределенного поведения в ROOT приводит к появлению микро черных дыр.   -  person rubenvb    schedule 10.08.2011
comment
Древний пост, но я просто укажу, что эта строка создает временный TGraph в стеке, а затем без всякой причины копирует его при переназначении переменной графика. Небольшие накладные расходы с одним маленьким объектом TGraph, но с большими объектами или тысячами из них это глупо. Просто сделайте это: TGraph graph (xvect, yvect). Сортировано :-)   -  person andybuckley    schedule 08.04.2013


Ответы (3)


TCanvas*c1 = new TCanvas();
graph->Draw();
c1->Print("name.png");

Обязательно будет работать в оболочке cint. Для работы в скомпилированном коде может потребоваться некоторая тонкая настройка.

Вы найдете все эти базовые вещи, которые исчерпывающе описаны в интерактивных руководствах и HowTos. Также см. документацию в целом.

person dmckee --- ex-moderator kitten    schedule 11.06.2011
comment
возможно вам нужно использовать что-то вроде graph->Draw("AP") - person Ruggero Turra; 11.10.2011
comment
Я не понимаю одержимости ROOTer всем обновлением: TCanvas c1; ... c1.Print (...); c1.SaveAs (...); и т. д. работает нормально - и в качестве бонуса он короче и не пропускает память ;-) - person andybuckley; 08.04.2013
comment
@andybuckley Сильное изменение чуши карго-культа в этом, но ... Это потому, что документация делает это таким образом, и это потому, что почти все наследуется от TObject, который выделяет постоянное хранилище в частной куче для отслеживание имен всего, чтобы получить определенное отражение, и некоторые функции этой системы отражения, похоже, полагаются на распределение кучи. Хотя я никогда не был очень ясен в отношении задержанных и мог ошибаться. - person dmckee --- ex-moderator kitten; 09.04.2013
comment
@dmckee Cargo-cult или нет, это интересно / полезно! У меня лично не было проблем, но то, что я спотыкаюсь из-за этого нелокального состояния, является одной из основных причин, по которой я предпочитаю другие инструменты анализа! PyROOT (а теперь и rootpy, построенный на нем) - довольно хороший способ получить доступ к функциям ядра ROOT с меньшим количеством проблем с памятью. - person andybuckley; 10.04.2013

TCanvas*cvs = new TCanvas();
graph->Draw();
cvs->SaveAs("name.png");

SaveAs был моей функцией для сохранения графиков в корне. В качестве примечания, онлайн-документация, как сказал dmckee, очень полезна. список классов

person ac1dicburn    schedule 10.08.2011

Полный макрос будет:

TCanvas *c1 = new TCanvas();
const Int_t n = 10;
Double_t xvect[n];
Double_t yvect[n];
.... initialize xvect and y vect
TGraph graph = TGraph(n, xvect, yvect);
graph->Draw("al"); // draw the graph as a line (see the ROOT wen site for more option)
c1->SaveAs("c1.png"); // many other formats are available (PS, PDF, JPEG etc...)
person Couet    schedule 05.03.2014