Beispiel #1
0
    void GnuplotGraph::save(const char* filename)
    {
      int j;

      if(!rows.size()) throw Hermes::Exceptions::Exception("No data rows defined.");

      FILE* f = fopen(filename, "w");
      if(f == NULL) throw Hermes::Exceptions::Exception("Error writing to %s", filename);

      fprintf(f, "%s", terminal_str.c_str());

      int len = strlen(filename);
      char* outname = new char[len + 10];
      strcpy(outname, filename);
      char* slash = strrchr(outname, '/');
      if(slash != NULL) strcpy(outname, ++slash);
      char* dot = strrchr(outname, '.');
      if(dot != NULL && dot > outname) *dot = 0;
      strcat(outname, ".eps");

      fprintf(f, "set output '%s'\n", (char*)outname);

      fprintf(f, "set size 0.8, 0.8\n");

      if(logx && !logy)
        fprintf(f, "set logscale x\n");
      else if(!logx && logy)
        fprintf(f, "set logscale y\n");
      else if(logx && logy)
      {
        fprintf(f, "set logscale x\n");
        fprintf(f, "set logscale y\n");
      }

      if(grid) fprintf(f, "set grid\n");

      if(title.length()) fprintf(f, "set title '%s'\n", title.c_str());
      if(xname.length()) fprintf(f, "set xlabel '%s'\n", xname.c_str());
      if(yname.length()) fprintf(f, "set ylabel '%s'\n", yname.c_str());
      if(legend && legend_pos.length()) fprintf(f, "set key %s\n", legend_pos.c_str());

      fprintf(f, "plot");
      for (unsigned int i = 0; i < rows.size(); i++)
      {
        int ct, lt, pt;
        get_style_types(rows[i].line, rows[i].marker, rows[i].color, lt, pt, ct);

        if(lt == 0)
          fprintf(f, " '-' w p pointtype %d", pt);
        else if(ct < 0)
          fprintf(f, " '-' w lp linewidth %g linetype %d pointtype %d", this->lw, lt, pt);
        else
          fprintf(f, " '-' w lp linewidth %g linecolor %d linetype %d pointtype %d", this->lw, ct, lt, pt);

        if(legend)
          fprintf(f, " title '%s' ", rows[i].name.c_str());
        else
          fprintf(f, " notitle ");

        if(i < rows.size() - 1) fprintf(f, ",\\\n     ");
      }
      fprintf(f,"\n");

      for (unsigned int i = 0; i < rows.size(); i++)
      {
        int rsize = rows[i].data.size();
        for (j = 0; j < rsize; j++)
          fprintf(f, "%.14g  %.14g\n", rows[i].data[j].x, rows[i].data[j].y);
        fprintf(f, "e\n");
      }

      fprintf(f, "set terminal x11\n");
      fclose(f);

      this->info("Graph saved. Process the file '%s' with gnuplot.", filename);
    }
Beispiel #2
0
void GnuplotGraph::save(const char* filename)
{
  int i, j, k;

  if (!rows.size()) error("No data rows defined.");

  FILE* f = fopen(filename, "w");
  if (f == NULL) error("Error writing to %s", filename);

  fprintf(f, "set terminal postscript eps enhanced\n");

  int len = strlen(filename);
  char outname[len + 10];
  strcpy(outname, filename);
  char* slash = strrchr(outname, '/');
  if (slash != NULL) strcpy(outname, ++slash);
  char* dot = strrchr(outname, '.');
  if (dot != NULL && dot > outname) *dot = 0;
  strcat(outname, ".eps");

  fprintf(f, "set output '%s'\n", outname);

  fprintf(f, "set size 0.8, 0.8\n");

  if (logx && !logy)
    fprintf(f, "set logscale x\n");
  else if (!logx && logy)
    fprintf(f, "set logscale y\n");
  else if (logx && logy)
  {
    fprintf(f, "set logscale x\n");
    fprintf(f, "set logscale y\n");
  }

  if (grid) fprintf(f, "set grid\n");

  if (title.length()) fprintf(f, "set title '%s'\n", title.c_str());
  if (xname.length()) fprintf(f, "set xlabel '%s'\n", xname.c_str());
  if (yname.length()) fprintf(f, "set ylabel '%s'\n", yname.c_str());

  fprintf(f, "plot");
  for (i = 0; i < rows.size(); i++)
  {
    int ct, lt, pt;
    get_style_types(rows[i].line, rows[i].marker, rows[i].color, lt, pt, ct);

    if (lt == 0)
      fprintf(f, " '-' w p pointtype %d title '%s' ", pt, rows[i].name.c_str());
    else if (ct < 0)
      fprintf(f, " '-' w lp linetype %d pointtype %d title '%s' ", lt, pt, rows[i].name.c_str());
    else
      fprintf(f, " '-' w lp linecolor %d linetype %d pointtype %d title '%s' ", ct, lt, pt, rows[i].name.c_str());

    if (i < rows.size() - 1) fprintf(f, ", ");
  }
  fprintf(f,"\n");

  for (i = 0; i < rows.size(); i++)
  {
    int rsize = rows[i].data.size();
    for (j = 0; j < rsize; j++)
      fprintf(f, "%.14g  %.14g\n", rows[i].data[j].x, rows[i].data[j].y);
    fprintf(f, "e\n");
  }

  fprintf(f, "set terminal x11\n");
  info("Graph saved. Process the file '%s' with gnuplot.", filename);
  fclose(f);
}