A Discrete-Event Network Simulator
API
gnuplot.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2007 INRIA, 2008 Timo Bingmann
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Original Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
19  * Enhancements: Timo Bingmann <timo.bingmann@student.kit.edu>
20  */
21 #ifndef GNUPLOT_H
22 #define GNUPLOT_H
23 
24 #include <string>
25 #include <vector>
26 #include <utility>
27 
28 namespace ns3 {
29 
39 {
40 public:
41 
46  GnuplotDataset (const GnuplotDataset& original);
47 
52 
58  GnuplotDataset& operator= (const GnuplotDataset& original);
59 
68  void SetTitle (const std::string& title);
69 
74  static void SetDefaultExtra (const std::string& extra);
75 
80  void SetExtra (const std::string& extra);
81 
82 protected:
83 
86  friend class Gnuplot;
87 
91  static std::string m_defaultExtra;
92 
96  struct Data;
97 
102  GnuplotDataset (struct Data* data);
103 
107  struct Data* m_data;
108 };
109 
118 {
119 public:
123  enum Style {
132  };
133 
137  enum ErrorBars {
139  X,
140  Y,
142  };
143 
150  Gnuplot2dDataset (const std::string& title = "Untitled");
151 
156  static void SetDefaultStyle (enum Style style);
157 
161  void SetStyle (enum Style style);
162 
167  static void SetDefaultErrorBars (enum ErrorBars errorBars);
168 
177  void SetErrorBars (enum ErrorBars errorBars);
178 
185  void Add (double x, double y);
186 
194  void Add (double x, double y, double errorDelta);
195 
204  void Add (double x, double y, double xErrorDelta, double yErrorDelta);
205 
210  void AddEmptyLine ();
211 
212 private:
213 
217  struct Point {
218  bool empty;
219  double x;
220  double y;
221  double dx;
222  double dy;
223  };
224 
226  typedef std::vector<struct Point> PointSet;
227 
228  static enum Style m_defaultStyle;
230 
232  struct Data2d;
233 };
234 
244 {
245 public:
253  Gnuplot2dFunction (const std::string& title = "Untitled", const std::string& function = "");
254 
258  void SetFunction (const std::string& function);
259 
260 private:
261 
263  struct Function2d;
264 };
265 
273 {
274 public:
281  Gnuplot3dDataset (const std::string& title = "Untitled");
282 
287  static void SetDefaultStyle (const std::string& style);
288 
292  void SetStyle (const std::string& style);
293 
301  void Add (double x, double y, double z);
302 
307  void AddEmptyLine ();
308 
309 private:
310 
314  struct Point {
315  bool empty;
316  double x;
317  double y;
318  double z;
319  };
320 
322  typedef std::vector<struct Point> PointSet;
323 
324  static std::string m_defaultStyle;
325 
327  struct Data3d;
328 };
329 
340 {
341 public:
349  Gnuplot3dFunction (const std::string& title = "Untitled", const std::string& function = "");
350 
354  void SetFunction (const std::string& function);
355 
356 private:
357 
359  struct Function3d;
360 };
361 
371 class Gnuplot
372 {
373 public:
380  Gnuplot (const std::string& outputFilename="", const std::string& title = "");
381 
387  void SetOutputFilename (const std::string& outputFilename);
388 
395  static std::string DetectTerminal (const std::string& filename);
396 
401  void SetTerminal (const std::string& terminal);
402 
406  void SetTitle (const std::string& title);
407 
412  void SetLegend (const std::string& xLegend, const std::string& yLegend);
413 
417  void SetExtra (const std::string& extra);
418 
422  void AppendExtra (const std::string& extra);
423 
427  void AddDataset (const GnuplotDataset& dataset);
428 
437  void GenerateOutput (std::ostream &os);
438 
451  void GenerateOutput (std::ostream &osControl,
452  std::ostream &osData,
453  std::string dataFileName);
454 
460  void SetDataFileDatasetIndex (unsigned int index);
461 
462 private:
464  typedef std::vector<GnuplotDataset> Datasets;
465 
466  std::string m_outputFilename;
467  std::string m_terminal;
468 
469  Datasets m_datasets;
470 
471  std::string m_title;
472  std::string m_xLegend;
473  std::string m_yLegend;
474  std::string m_extra;
475 
477 
478  unsigned int m_dataFileDatasetIndex;
479 };
480 
488 {
489 public:
495  GnuplotCollection (const std::string& outputFilename);
496 
501  void SetTerminal (const std::string& terminal);
502 
506  void AddPlot (const Gnuplot& plot);
507 
513  Gnuplot& GetPlot (unsigned int id);
514 
519  void GenerateOutput (std::ostream &os);
520 
530  void GenerateOutput (std::ostream &osControl,
531  std::ostream &osData,
532  std::string dataFileName);
533 
534 private:
536  typedef std::vector<Gnuplot> Plots;
537 
538  std::string m_outputFilename;
539  std::string m_terminal;
540 
541  Plots m_plots;
542 };
543 
544 } // namespace ns3
545 
546 #endif /* GNUPLOT_H */
Structure storing the function to be used for a 3D plot.
Definition: gnuplot.cc:618
Plots m_plots
Plots in the collection.
Definition: gnuplot.h:541
void AppendExtra(const std::string &extra)
Definition: gnuplot.cc:749
A point in a 2D plot.
Definition: gnuplot.h:217
Class to represent a 3D points plot.
Definition: gnuplot.h:272
Class to represent a 2D points plot.
Definition: gnuplot.h:117
void SetTitle(const std::string &title)
Change line title.
Definition: gnuplot.cc:141
Abstract class to store a plot line to be used by ns3::Gnuplot.
Definition: gnuplot.h:38
Gnuplot(const std::string &outputFilename="", const std::string &title="")
Definition: gnuplot.cc:694
Gnuplot2dDataset(const std::string &title="Untitled")
Definition: gnuplot.cc:331
static void SetDefaultExtra(const std::string &extra)
Change extra formatting style parameters for newly created objects.
Definition: gnuplot.cc:147
void Add(double x, double y, double z)
Definition: gnuplot.cc:593
GnuplotDataset & operator=(const GnuplotDataset &original)
Reference-counting assignment operator.
Definition: gnuplot.cc:127
static std::string m_defaultExtra
Extra gnuplot parameters set on every newly created dataset.
Definition: gnuplot.h:91
void SetFunction(const std::string &function)
Definition: gnuplot.cc:485
void AddDataset(const GnuplotDataset &dataset)
Definition: gnuplot.cc:756
Class to represent a 3D function expression plot.
Definition: gnuplot.h:339
double y
Y coordinate.
Definition: gnuplot.h:317
std::vector< struct Point > PointSet
The set of points in the dataset.
Definition: gnuplot.h:322
void SetExtra(const std::string &extra)
Add extra formatting parameters to this dataset.
Definition: gnuplot.cc:152
void SetErrorBars(enum ErrorBars errorBars)
Definition: gnuplot.cc:353
double x
X coordinate.
Definition: gnuplot.h:219
~GnuplotDataset()
Reference-counting destructor.
Definition: gnuplot.cc:121
std::vector< GnuplotDataset > Datasets
Type for Datasets to be used in plots.
Definition: gnuplot.h:464
std::string m_xLegend
X axis legend.
Definition: gnuplot.h:472
std::string m_outputFilename
Output file name.
Definition: gnuplot.h:466
void SetOutputFilename(const std::string &outputFilename)
Definition: gnuplot.cc:703
struct Data * m_data
Reference counted data object.
Definition: gnuplot.h:107
Structure storing the data to for a 2D plot.
Definition: gnuplot.cc:164
a simple class to generate gnuplot-ready plotting commands from a set of datasets.
Definition: gnuplot.h:371
a simple class to group together multiple gnuplots into one file, e.g.
Definition: gnuplot.h:487
void SetTitle(const std::string &title)
Definition: gnuplot.cc:730
static std::string m_defaultStyle
default plot style
Definition: gnuplot.h:324
double x
X coordinate.
Definition: gnuplot.h:316
uint8_t data[writeSize]
void AddEmptyLine()
Add an empty line in the data output sequence.
Definition: gnuplot.cc:604
Gnuplot3dDataset(const std::string &title="Untitled")
Definition: gnuplot.cc:576
void GenerateOutput(std::ostream &os)
Writes gnuplot commands and data values to a single output stream.
Definition: gnuplot.cc:762
void Add(double x, double y)
Definition: gnuplot.cc:359
Gnuplot2dFunction(const std::string &title="Untitled", const std::string &function="")
Definition: gnuplot.cc:479
Gnuplot3dFunction(const std::string &title="Untitled", const std::string &function="")
Definition: gnuplot.cc:681
void AddPlot(const Gnuplot &plot)
Definition: gnuplot.cc:868
A point in a 3D plot.
Definition: gnuplot.h:314
bool empty
the point is empty
Definition: gnuplot.h:218
void SetLegend(const std::string &xLegend, const std::string &yLegend)
Definition: gnuplot.cc:736
static void SetDefaultErrorBars(enum ErrorBars errorBars)
Change default errorbars style for all newly created objects.
Definition: gnuplot.cc:348
GnuplotCollection(const std::string &outputFilename)
Definition: gnuplot.cc:855
void GenerateOutput(std::ostream &os)
Definition: gnuplot.cc:883
static void SetDefaultStyle(enum Style style)
Change default style for all newly created objects.
Definition: gnuplot.cc:337
Every class exported by the ns3 library is enclosed in the ns3 namespace.
double z
Z coordinate.
Definition: gnuplot.h:318
Style
The plotting style to use for this dataset.
Definition: gnuplot.h:123
ErrorBars
Whether errorbars should be used for this dataset.
Definition: gnuplot.h:137
Structure storing the data to plot.
Definition: gnuplot.cc:36
Datasets m_datasets
Data sets.
Definition: gnuplot.h:469
std::vector< struct Point > PointSet
The set of points in the dataset.
Definition: gnuplot.h:226
void SetStyle(enum Style style)
Definition: gnuplot.cc:342
void SetExtra(const std::string &extra)
Definition: gnuplot.cc:743
void SetStyle(const std::string &style)
Definition: gnuplot.cc:587
std::string m_outputFilename
Output file name.
Definition: gnuplot.h:538
std::string m_extra
extra parameters for the plot
Definition: gnuplot.h:474
bool empty
the point is empty
Definition: gnuplot.h:315
void SetTerminal(const std::string &terminal)
Definition: gnuplot.cc:862
std::vector< Gnuplot > Plots
Type of the Gnuplot collection.
Definition: gnuplot.h:536
unsigned int m_dataFileDatasetIndex
Data set index to plot.
Definition: gnuplot.h:478
std::string m_terminal
Gnuplot "terminal" to use.
Definition: gnuplot.h:539
void SetFunction(const std::string &function)
Definition: gnuplot.cc:687
std::string m_title
Plot title.
Definition: gnuplot.h:471
GnuplotDataset(const GnuplotDataset &original)
Reference-counting copy constructor.
Definition: gnuplot.cc:115
bool m_generateOneOutputFile
true if only one plot will be generated
Definition: gnuplot.h:476
Class to represent a 2D function expression plot.
Definition: gnuplot.h:243
Structure storing the data for a 3D plot.
Definition: gnuplot.cc:497
double dx
X error delta.
Definition: gnuplot.h:221
static void SetDefaultStyle(const std::string &style)
Change default style for all newly created objects.
Definition: gnuplot.cc:582
static std::string DetectTerminal(const std::string &filename)
Crude attempt to auto-detect the correct terminal setting by inspecting the filename's extension...
Definition: gnuplot.cc:708
std::string m_yLegend
Y axis legend.
Definition: gnuplot.h:473
void AddEmptyLine()
Add an empty line in the data output sequence.
Definition: gnuplot.cc:402
static enum Style m_defaultStyle
default plot style
Definition: gnuplot.h:228
double dy
Y error delta.
Definition: gnuplot.h:222
void SetDataFileDatasetIndex(unsigned int index)
Sets the current data stream index in the data file.
Definition: gnuplot.cc:848
std::string m_terminal
Gnuplot "terminal" to use.
Definition: gnuplot.h:467
void SetTerminal(const std::string &terminal)
Definition: gnuplot.cc:724
Structure storing the function to be used for a 2D plot.
Definition: gnuplot.cc:416
double y
Y coordinate.
Definition: gnuplot.h:220
Gnuplot & GetPlot(unsigned int id)
Return a pointer to one of the added plots.
Definition: gnuplot.cc:874
static enum ErrorBars m_defaultErrorBars
default error bars type
Definition: gnuplot.h:229