使用 ROOT 框架绘制 C++ 中的数学函数

Using the ROOT framework to plot a mathematical function in C++

我正在尝试使用 "ROOT" data analysis framework with C++. I've tried to use this code (found in a user guide on the web):

绘制函数图
   Int_t n = 20;
   Double_t x[n], y[n];
   for (Int_t i=0;i<n;i++) {
      x[i] = i*0.1;
      y[i] = 10*sin(x[i]+0.2);
   }

   // create graph
   TGraph *gr  = new TGraph(n,x,y);
   TCanvas *c1 = new TCanvas("c1","Graph Draw Options",
                             200,10,600,400);

   // draw the graph with axis, continuous line, and put
   // a * at each point
   gr->Draw("AC*");

预期的行为是获取带有函数二维绘图的图片(请参阅用户指南中的图片)。但不幸的是,没有图表显示。

当我使用 ROOT 提示时,我可以显示 canvas 如果我这样做:

root [3] g = new TGraph()
root [4] g->Draw()

但是,如果我从 C++(使用 g++)编写和编译它,它不会打开任何 canvas,也不会显示任何图形。它有时会显示消息:Info in <TCanvas::MakeDefCanvas>: created default TCanvas with name c1 但什么也没有发生 - 没有图表或 canvas 出现。

如何在 C++ 程序中使用 ROOT 来生成函数的图形绘图?

您是否按照此处的步骤操作,https://root.cern/primer/?#interpretation-and-compilation

这是一个工作示例。

demo.cpp

#include <TApplication.h>
#include <TGraph.h>

void guiDemo() {
   Int_t n = 20;
   Double_t x[n], y[n];
   for (Int_t i=0;i<n;i++) {
      x[i] = i*0.1;
      y[i] = 10*sin(x[i]+0.2);
   }

   // create graph
   TGraph *gr  = new TGraph(n,x,y);

   // draw the graph with axis, continuous line, and put
   // a * at each point
   gr->Draw("AC*");
}

int main(int argc, char **argv) {
  TApplication app("Root app", &argc, argv);
  guiDemo();
  app.Run();
  return 0;
}

编译
 g++ -Wall -Wextra -o demo demo.cpp `root-config --cflags --libs`