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); }
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); }