A Discrete-Event Network Simulator
API
gnuplot.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2007 INRIA, 2008 Timo Bingmann
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation;
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program; if not, write to the Free Software
15  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16  *
17  * Original Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
18  * Enhancements: Timo Bingmann <timo.bingmann@student.kit.edu>
19  */
20 #ifndef GNUPLOT_H
21 #define GNUPLOT_H
22 
23 #include <string>
24 #include <utility>
25 #include <vector>
26 
27 namespace ns3
28 {
29 
39 {
40  public:
45  GnuplotDataset(const GnuplotDataset& original);
46 
51 
57  GnuplotDataset& operator=(const GnuplotDataset& original);
58 
67  void SetTitle(const std::string& title);
68 
73  static void SetDefaultExtra(const std::string& extra);
74 
79  void SetExtra(const std::string& extra);
80 
81  protected:
84  friend class Gnuplot;
85 
89  static std::string m_defaultExtra;
90 
94  struct Data;
95 
100  GnuplotDataset(struct Data* data);
101 
105  struct Data* m_data;
106 };
107 
116 {
117  public:
121  enum Style
122  {
131  };
132 
137  {
139  X,
140  Y,
141  XY
142  };
143 
150  Gnuplot2dDataset(const std::string& title = "Untitled");
151 
156  static void SetDefaultStyle(Style style);
157 
161  void SetStyle(Style style);
162 
167  static void SetDefaultErrorBars(ErrorBars errorBars);
168 
177  void SetErrorBars(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:
216  struct Point
217  {
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 
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:
262  struct Function2d;
263 };
264 
272 {
273  public:
280  Gnuplot3dDataset(const std::string& title = "Untitled");
281 
286  static void SetDefaultStyle(const std::string& style);
287 
291  void SetStyle(const std::string& style);
292 
300  void Add(double x, double y, double z);
301 
306  void AddEmptyLine();
307 
308  private:
312  struct Point
313  {
314  bool empty;
315  double x;
316  double y;
317  double z;
318  };
319 
321  typedef std::vector<struct Point> PointSet;
322 
323  static std::string m_defaultStyle;
324 
326  struct Data3d;
327 };
328 
339 {
340  public:
348  Gnuplot3dFunction(const std::string& title = "Untitled", const std::string& function = "");
349 
353  void SetFunction(const std::string& function);
354 
355  private:
357  struct Function3d;
358 };
359 
369 class Gnuplot
370 {
371  public:
378  Gnuplot(const std::string& outputFilename = "", const std::string& title = "");
379 
385  void SetOutputFilename(const std::string& outputFilename);
386 
393  static std::string DetectTerminal(const std::string& filename);
394 
399  void SetTerminal(const std::string& terminal);
400 
404  void SetTitle(const std::string& title);
405 
410  void SetLegend(const std::string& xLegend, const std::string& yLegend);
411 
415  void SetExtra(const std::string& extra);
416 
420  void AppendExtra(const std::string& extra);
421 
425  void AddDataset(const GnuplotDataset& dataset);
426 
435  void GenerateOutput(std::ostream& os);
436 
449  void GenerateOutput(std::ostream& osControl, std::ostream& osData, std::string dataFileName);
450 
456  void SetDataFileDatasetIndex(unsigned int index);
457 
458  private:
460  typedef std::vector<GnuplotDataset> Datasets;
461 
462  std::string m_outputFilename;
463  std::string m_terminal;
464 
466 
467  std::string m_title;
468  std::string m_xLegend;
469  std::string m_yLegend;
470  std::string m_extra;
471 
473 
474  unsigned int m_dataFileDatasetIndex;
475 };
476 
484 {
485  public:
491  GnuplotCollection(const std::string& outputFilename);
492 
497  void SetTerminal(const std::string& terminal);
498 
502  void AddPlot(const Gnuplot& plot);
503 
509  Gnuplot& GetPlot(unsigned int id);
510 
515  void GenerateOutput(std::ostream& os);
516 
526  void GenerateOutput(std::ostream& osControl, std::ostream& osData, std::string dataFileName);
527 
528  private:
530  typedef std::vector<Gnuplot> Plots;
531 
532  std::string m_outputFilename;
533  std::string m_terminal;
534 
536 };
537 
538 } // namespace ns3
539 
540 #endif /* GNUPLOT_H */
Class to represent a 2D points plot.
Definition: gnuplot.h:116
void AddEmptyLine()
Add an empty line in the data output sequence.
Definition: gnuplot.cc:420
std::vector< struct Point > PointSet
The set of points in the dataset.
Definition: gnuplot.h:226
static Style m_defaultStyle
default plot style
Definition: gnuplot.h:228
static void SetDefaultStyle(Style style)
Change default style for all newly created objects.
Definition: gnuplot.cc:353
ErrorBars
Whether errorbars should be used for this dataset.
Definition: gnuplot.h:137
static void SetDefaultErrorBars(ErrorBars errorBars)
Change default errorbars style for all newly created objects.
Definition: gnuplot.cc:365
void SetErrorBars(ErrorBars errorBars)
Definition: gnuplot.cc:371
void SetStyle(Style style)
Definition: gnuplot.cc:359
void Add(double x, double y)
Definition: gnuplot.cc:377
Style
The plotting style to use for this dataset.
Definition: gnuplot.h:122
static ErrorBars m_defaultErrorBars
default error bars type
Definition: gnuplot.h:229
Gnuplot2dDataset(const std::string &title="Untitled")
Definition: gnuplot.cc:347
Class to represent a 2D function expression plot.
Definition: gnuplot.h:244
void SetFunction(const std::string &function)
Definition: gnuplot.cc:507
Gnuplot2dFunction(const std::string &title="Untitled", const std::string &function="")
Definition: gnuplot.cc:501
Class to represent a 3D points plot.
Definition: gnuplot.h:272
void AddEmptyLine()
Add an empty line in the data output sequence.
Definition: gnuplot.cc:633
Gnuplot3dDataset(const std::string &title="Untitled")
Definition: gnuplot.cc:604
static std::string m_defaultStyle
default plot style
Definition: gnuplot.h:323
std::vector< struct Point > PointSet
The set of points in the dataset.
Definition: gnuplot.h:321
void Add(double x, double y, double z)
Definition: gnuplot.cc:622
static void SetDefaultStyle(const std::string &style)
Change default style for all newly created objects.
Definition: gnuplot.cc:610
void SetStyle(const std::string &style)
Definition: gnuplot.cc:616
Class to represent a 3D function expression plot.
Definition: gnuplot.h:339
Gnuplot3dFunction(const std::string &title="Untitled", const std::string &function="")
Definition: gnuplot.cc:714
void SetFunction(const std::string &function)
Definition: gnuplot.cc:720
a simple class to group together multiple gnuplots into one file, e.g.
Definition: gnuplot.h:484
std::string m_outputFilename
Output file name.
Definition: gnuplot.h:532
GnuplotCollection(const std::string &outputFilename)
Definition: gnuplot.cc:906
void AddPlot(const Gnuplot &plot)
Definition: gnuplot.cc:919
void SetTerminal(const std::string &terminal)
Definition: gnuplot.cc:913
Gnuplot & GetPlot(unsigned int id)
Return a pointer to one of the added plots.
Definition: gnuplot.cc:925
std::string m_terminal
Gnuplot "terminal" to use.
Definition: gnuplot.h:533
Plots m_plots
Plots in the collection.
Definition: gnuplot.h:535
void GenerateOutput(std::ostream &os)
Definition: gnuplot.cc:938
std::vector< Gnuplot > Plots
Type of the Gnuplot collection.
Definition: gnuplot.h:530
Abstract class to store a plot line to be used by ns3::Gnuplot.
Definition: gnuplot.h:39
GnuplotDataset(const GnuplotDataset &original)
Reference-counting copy constructor.
Definition: gnuplot.cc:117
static void SetDefaultExtra(const std::string &extra)
Change extra formatting style parameters for newly created objects.
Definition: gnuplot.cc:154
GnuplotDataset & operator=(const GnuplotDataset &original)
Reference-counting assignment operator.
Definition: gnuplot.cc:132
struct Data * m_data
Reference counted data object.
Definition: gnuplot.h:105
void SetExtra(const std::string &extra)
Add extra formatting parameters to this dataset.
Definition: gnuplot.cc:160
static std::string m_defaultExtra
Extra gnuplot parameters set on every newly created dataset.
Definition: gnuplot.h:89
void SetTitle(const std::string &title)
Change line title.
Definition: gnuplot.cc:148
~GnuplotDataset()
Reference-counting destructor.
Definition: gnuplot.cc:123
a simple class to generate gnuplot-ready plotting commands from a set of datasets.
Definition: gnuplot.h:370
std::string m_yLegend
Y axis legend.
Definition: gnuplot.h:469
void AddDataset(const GnuplotDataset &dataset)
Definition: gnuplot.cc:796
void SetLegend(const std::string &xLegend, const std::string &yLegend)
Definition: gnuplot.cc:776
void SetTerminal(const std::string &terminal)
Definition: gnuplot.cc:764
std::string m_terminal
Gnuplot "terminal" to use.
Definition: gnuplot.h:463
std::string m_extra
extra parameters for the plot
Definition: gnuplot.h:470
unsigned int m_dataFileDatasetIndex
Data set index to plot.
Definition: gnuplot.h:474
void AppendExtra(const std::string &extra)
Definition: gnuplot.cc:789
Datasets m_datasets
Data sets.
Definition: gnuplot.h:465
void GenerateOutput(std::ostream &os)
Writes gnuplot commands and data values to a single output stream.
Definition: gnuplot.cc:802
std::string m_title
Plot title.
Definition: gnuplot.h:467
std::vector< GnuplotDataset > Datasets
Type for Datasets to be used in plots.
Definition: gnuplot.h:460
void SetDataFileDatasetIndex(unsigned int index)
Sets the current data stream index in the data file.
Definition: gnuplot.cc:899
std::string m_xLegend
X axis legend.
Definition: gnuplot.h:468
std::string m_outputFilename
Output file name.
Definition: gnuplot.h:462
Gnuplot(const std::string &outputFilename="", const std::string &title="")
Definition: gnuplot.cc:727
void SetExtra(const std::string &extra)
Definition: gnuplot.cc:783
void SetTitle(const std::string &title)
Definition: gnuplot.cc:770
void SetOutputFilename(const std::string &outputFilename)
Definition: gnuplot.cc:737
bool m_generateOneOutputFile
true if only one plot will be generated
Definition: gnuplot.h:472
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:743
Every class exported by the ns3 library is enclosed in the ns3 namespace.
uint8_t data[writeSize]
Structure storing the data to for a 2D plot.
Definition: gnuplot.cc:173
A point in a 2D plot.
Definition: gnuplot.h:217
double y
Y coordinate.
Definition: gnuplot.h:220
double dx
X error delta.
Definition: gnuplot.h:221
bool empty
the point is empty
Definition: gnuplot.h:218
double x
X coordinate.
Definition: gnuplot.h:219
double dy
Y error delta.
Definition: gnuplot.h:222
Structure storing the function to be used for a 2D plot.
Definition: gnuplot.cc:435
Structure storing the data for a 3D plot.
Definition: gnuplot.cc:520
A point in a 3D plot.
Definition: gnuplot.h:313
bool empty
the point is empty
Definition: gnuplot.h:314
double x
X coordinate.
Definition: gnuplot.h:315
double z
Z coordinate.
Definition: gnuplot.h:317
double y
Y coordinate.
Definition: gnuplot.h:316
Structure storing the function to be used for a 3D plot.
Definition: gnuplot.cc:648
Structure storing the data to plot.
Definition: gnuplot.cc:39