From 9d5261f0bd8b03b9a2c100dcad6ef9be42c55ca9 Mon Sep 17 00:00:00 2001 From: Mitch Watrous Date: Thu, 8 Sep 2011 10:52:12 -0700 Subject: [PATCH] Add Gnuplot section to ns-3 Manual --- doc/manual/Makefile | 6 +- .../figures/plot-2d-with-error-bars.png | Bin 0 -> 3123 bytes doc/manual/figures/plot-2d.png | Bin 0 -> 3923 bytes doc/manual/figures/plot-3d.png | Bin 0 -> 9034 bytes doc/manual/source/gnuplot.rst | 294 ++++++++++++++++++ doc/manual/source/index.rst | 1 + doc/manual/source/python.rst | 2 +- src/tools/examples/gnuplot-example.cc | 2 +- 8 files changed, 302 insertions(+), 3 deletions(-) create mode 100644 doc/manual/figures/plot-2d-with-error-bars.png create mode 100644 doc/manual/figures/plot-2d.png create mode 100644 doc/manual/figures/plot-3d.png create mode 100644 doc/manual/source/gnuplot.rst diff --git a/doc/manual/Makefile b/doc/manual/Makefile index 2380764b3..9931864a5 100644 --- a/doc/manual/Makefile +++ b/doc/manual/Makefile @@ -11,7 +11,11 @@ IMAGES_EPS = \ # rescale pdf figures as necessary $(FIGURES)/software-organization.pdf_width = 5in -IMAGES_PNG = ${IMAGES_EPS:.eps=.png} +IMAGES_PNG = \ + $(FIGURES)/plot-2d.png \ + $(FIGURES)/plot-2d-with-error-bars.png \ + $(FIGURES)/plot-3d.png \ + ${IMAGES_EPS:.eps=.png} IMAGES_PDF = ${IMAGES_EPS:.eps=.pdf} IMAGES = $(IMAGES_EPS) $(IMAGES_PNG) $(IMAGES_PDF) diff --git a/doc/manual/figures/plot-2d-with-error-bars.png b/doc/manual/figures/plot-2d-with-error-bars.png new file mode 100644 index 0000000000000000000000000000000000000000..c396f2a6eb7501b0d55468837da7eab5fd5818c7 GIT binary patch literal 3123 zcmb_e3pA8zAAjd&iVf5Iq&m-{?Gsa`(K{R`y@I$ z*)CC7sQ^LH61!bidm#u05JbW#iwFsSz)=W?Mn_R5 z@qri&6h|2lU~&Ntm=F$d2t^`?%r z0Kth!2yZBk6Ff1?B_cwJK#3G^h!Ap7l#3(C!T>-x7Xlc@B^u5k0zx5_%V2OBI3R!- zj0JB@0FVV#K!Br!2@~fM4Z*o=oIw2z5yw$ioyXx2r0~?vYNu-yXQbm|M7lk6-sON0 zH#I)?nC;eZIt~cL$F6QY*^}(EVs)aoKJ*8nrCS}h_-2evy)MqV<-X;E%iY{cc^u~o z4jH34rUMyXjic3O3g5hMOorMrhva3gLbd`8o-;Lnuk`(tPi^m5>1&;;dclfd-a7fo zaQUw0>R2$cPL^gnRe0H;GT!Axg-zE)NXR#8m-|ogSI9NS`maGnp@U&*3hXzvBa^S< zccg&&`aDUCx7iQ0#b3!dWToJ_ZTOkX%>PaK5}2zVk^)s30rdo;@VfW2`Ni3OF8kb;z^>e_*NhXfm~b(yZNKaf|)HFQ$P; z_1!Ofzf{M5&ghHp9}FX#aq8wxS0Y0)qlb3WkbGtlS*t~6m^;#YYWT8U_Rww$ZXr(QL(x5wt2twx}+JFN5avsLki1#{qb)$>I+AV1~2_&(8=Q<8VBq&^Y@;BhVU%-<1}INC~%+MFR57410HSyNVlM~fRHpYq++BHtv>7P*3gMO>(Uy#|J_PLEDV zu?R>v?)F|EQ(>$f6A@QO=@p2SFKR9_fi-uJQd-PMH!a@>M5^B^MwL$7#H{~uVHDYB zPK)(Um}WbWG?QtKA4~hs=ss4UNp_FX_diw>R ztaYSqj>EdE#bZ;&{H(-N`sV$+ohif}xYni(-_qzKseEsxdad<+72&D_u4FGCS`4 z8q_zBD69td&d@>|t!+}qUN$=pQTXf^N<`x7WZB^%kqWPvTwigxhyxjyyt=lG+G}`5 z1Z>@^RisUJyZY%QO$RzjxSghfg%U*=s6X3YbW$}8F_M>cq-GL+^QjGyRh)fvlK0Hb zjGE-qRH7h`pxQ8GPVbk#!Kl3Z*2@&#cfetKcGi!1MhsFWEniYuBjFwBVYggB9!=$tk$c2_KTZ`E_~u`@TvRvUt4N$ z$m7H99cAO%eejW=LVTxblBp8^(*$qedrTkhS#|UVmQ(tu8JjjZR+Xnt?bSf`b*o5c zbOmbf^8ybh(MdsyQvdtEnmXT2%CQFiu8ogkqE*8@p9KjN_cc0*f5{xqOSlQ*W{SSuGr|F$IOz@F69q=_FXQav(1ZRo7@#5p$; z-2_GUM2D>6{bpOVmcmYk)PDKZGw(0v8l>AU*1xVnx8w&LBuCl&7hk;%q-JSxor0Uu zri7(eW3L}nyoV#As^kjhDoxaN=;S^d?X{0^`7Jb%JOv!BHnSIDX*Fn|7IWD z+O<}e(J?Bs250}@RhVnf-&0*8?w|Fv2Q_Bp1LnF%zVqHsf4moF`3<(BGJmRMI3&1$5LV6 zx$E3-tn7 ziWk^dRcNBSSU%{3aO2}=A37^e3ZCD*<>|A`Cp_QXYrUAYPRzM}=IT2N`%-JmVX2Wg z{d$G3Zxg+%wT$;}Y2mC#Y{7TNd@b?A!D|wIbau&b5H^binai=7?!)a8qtnGog{B>2 zHFf$`zrUr}UkZDEew8i?!Mommd&>*__~X>pui+!Uj3lp&ioUgrd_E3 literal 0 HcmV?d00001 diff --git a/doc/manual/figures/plot-2d.png b/doc/manual/figures/plot-2d.png new file mode 100644 index 0000000000000000000000000000000000000000..3ba1621b64acf0d789b6de265c5fcec8503a11d0 GIT binary patch literal 3923 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 literal 0 HcmV?d00001 diff --git a/doc/manual/figures/plot-3d.png b/doc/manual/figures/plot-3d.png new file mode 100644 index 0000000000000000000000000000000000000000..5165a2a5a0d90e0f84f4699dfe113b2f6217a141 GIT binary patch literal 9034 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 literal 0 HcmV?d00001 diff --git a/doc/manual/source/gnuplot.rst b/doc/manual/source/gnuplot.rst new file mode 100644 index 000000000..c4253bb72 --- /dev/null +++ b/doc/manual/source/gnuplot.rst @@ -0,0 +1,294 @@ +.. include:: replace.txt + +Making Plots using the Gnuplot Class +------------------------------------ + +There are 2 common methods to make a plot using |ns3| and gnuplot (http://www.gnuplot.info): + +#. Create a gnuplot control file using |ns3|'s Gnuplot class. +#. Create a gnuplot data file using values generated by |ns3|. + +This section is about method 1, i.e. it is about how to make a plot using |ns3|'s Gnuplot class. If you are interested in method 2, see the "A Real Example" subsection under the "Tracing" section in the |ns3| `Tutorial `_. + +Creating Plots Using the Gnuplot Class +************************************** + +The following steps must be taken in order to create a plot using |ns3|'s Gnuplot class: + +#. Modify your code so that is uses the Gnuplot class and its functions. +#. Run your code so that it creates a gnuplot control file. +#. Call gnuplot with the name of the gnuplot control file. +#. View the graphics file that was produced in your favorite graphics viewer. + +See the code from the example plots that are discussed below for details on step 1. + +An Example Program that Uses the Gnuplot Class +********************************************** + +An example program that uses |ns3|'s Gnuplot class can be found here: :: + + src/tools/examples/gnuplot-example.cc + +In order to run this example, do the following: :: + + ./waf shell + cd build/debug/src/tools/examples + ./gnuplot-example + +This should produce the following gnuplot control files in the directory where the example is located: :: + + plot-2d.plt + plot-2d-with-error-bars.plt + plot-3d.plt + +In order to process these gnuplot control files, do the following: :: + + gnuplot plot-2d.plt + gnuplot plot-2d-with-error-bars.plt + gnuplot plot-3d.plt + +This should produce the following graphics files in the directory where the example is located: :: + + plot-2d.png + plot-2d-with-error-bars.png + plot-3d.png + +You can view these graphics files in your favorite graphics viewer. If you have gimp installed on your machine, for example, you can do this: :: + + gimp plot-2d.png + gimp plot-2d-with-error-bars.png + gimp plot-3d.png + +An Example 2-Dimensional Plot +***************************** + +The following 2-Dimensional plot + +.. _plot-2d: + +.. figure:: figures/plot-2d.* + +was created using the following code from gnuplot-example.cc: :: + + using namespace std; + + string fileNameWithNoExtension = "plot-2d"; + string graphicsFileName = fileNameWithNoExtension + ".png"; + string plotFileName = fileNameWithNoExtension + ".plt"; + string plotTitle = "2-D Plot"; + string dataTitle = "2-D Data"; + + // Instantiate the plot and set its title. + Gnuplot plot (graphicsFileName); + plot.SetTitle (plotTitle); + + // Make the graphics file, which the plot file will create when it + // is used with Gnuplot, be a PNG file. + plot.SetTerminal ("png"); + + // Set the labels for each axis. + plot.SetLegend ("X Values", "Y Values"); + + // Set the range for the x axis. + plot.AppendExtra ("set xrange [-6:+6]"); + + // Instantiate the dataset, set its title, and make the points be + // plotted along with connecting lines. + Gnuplot2dDataset dataset; + dataset.SetTitle (dataTitle); + dataset.SetStyle (Gnuplot2dDataset::LINES_POINTS); + + double x; + double y; + + // Create the 2-D dataset. + for (x = -5.0; x <= +5.0; x += 1.0) + { + // Calculate the 2-D curve + // + // 2 + // y = x . + // + y = x * x; + + // Add this point. + dataset.Add (x, y); + } + + // Add the dataset to the plot. + plot.AddDataset (dataset); + + // Open the plot file. + ofstream plotFile (plotFileName.c_str()); + + // Write the plot file. + plot.GenerateOutput (plotFile); + + // Close the plot file. + plotFile.close (); + +An Example 2-Dimensional Plot with Error Bars +********************************************* + +The following 2-Dimensional plot with error bars in the x and y directions + +.. _plot-2d-with-error-bars: + +.. figure:: figures/plot-2d-with-error-bars.* + +was created using the following code from gnuplot-example.cc: :: + + using namespace std; + + string fileNameWithNoExtension = "plot-2d-with-error-bars"; + string graphicsFileName = fileNameWithNoExtension + ".png"; + string plotFileName = fileNameWithNoExtension + ".plt"; + string plotTitle = "2-D Plot With Error Bars"; + string dataTitle = "2-D Data With Error Bars"; + + // Instantiate the plot and set its title. + Gnuplot plot (graphicsFileName); + plot.SetTitle (plotTitle); + + // Make the graphics file, which the plot file will create when it + // is used with Gnuplot, be a PNG file. + plot.SetTerminal ("png"); + + // Set the labels for each axis. + plot.SetLegend ("X Values", "Y Values"); + + // Set the range for the x axis. + plot.AppendExtra ("set xrange [-6:+6]"); + + // Instantiate the dataset, set its title, and make the points be + // plotted with no connecting lines. + Gnuplot2dDataset dataset; + dataset.SetTitle (dataTitle); + dataset.SetStyle (Gnuplot2dDataset::POINTS); + + // Make the dataset have error bars in both the x and y directions. + dataset.SetErrorBars (Gnuplot2dDataset::XY); + + double x; + double xErrorDelta; + double y; + double yErrorDelta; + + // Create the 2-D dataset. + for (x = -5.0; x <= +5.0; x += 1.0) + { + // Calculate the 2-D curve + // + // 2 + // y = x . + // + y = x * x; + + // Make the uncertainty in the x direction be constant and make + // the uncertainty in the y direction be a constant fraction of + // y's value. + xErrorDelta = 0.25; + yErrorDelta = 0.1 * y; + + // Add this point with uncertainties in both the x and y + // direction. + dataset.Add (x, y, xErrorDelta, yErrorDelta); + } + + // Add the dataset to the plot. + plot.AddDataset (dataset); + + // Open the plot file. + ofstream plotFile (plotFileName.c_str()); + + // Write the plot file. + plot.GenerateOutput (plotFile); + + // Close the plot file. + plotFile.close (); + +An Example 3-Dimensional Plot +***************************** + +The following 3-Dimensional plot + +.. _plot-3d: + +.. figure:: figures/plot-3d.* + +was created using the following code from gnuplot-example.cc: :: + + using namespace std; + + string fileNameWithNoExtension = "plot-3d"; + string graphicsFileName = fileNameWithNoExtension + ".png"; + string plotFileName = fileNameWithNoExtension + ".plt"; + string plotTitle = "3-D Plot"; + string dataTitle = "3-D Data"; + + // Instantiate the plot and set its title. + Gnuplot plot (graphicsFileName); + plot.SetTitle (plotTitle); + + // Make the graphics file, which the plot file will create when it + // is used with Gnuplot, be a PNG file. + plot.SetTerminal ("png"); + + // Rotate the plot 30 degrees around the x axis and then rotate the + // plot 120 degrees around the new z axis. + plot.AppendExtra ("set view 30, 120, 1.0, 1.0"); + + // Make the zero for the z-axis be in the x-axis and y-axis plane. + plot.AppendExtra ("set ticslevel 0"); + + // Set the labels for each axis. + plot.AppendExtra ("set xlabel 'X Values'"); + plot.AppendExtra ("set ylabel 'Y Values'"); + plot.AppendExtra ("set zlabel 'Z Values'"); + + // Set the ranges for the x and y axis. + plot.AppendExtra ("set xrange [-5:+5]"); + plot.AppendExtra ("set yrange [-5:+5]"); + + // Instantiate the dataset, set its title, and make the points be + // connected by lines. + Gnuplot3dDataset dataset; + dataset.SetTitle (dataTitle); + dataset.SetStyle ("with lines"); + + double x; + double y; + double z; + + // Create the 3-D dataset. + for (x = -5.0; x <= +5.0; x += 1.0) + { + for (y = -5.0; y <= +5.0; y += 1.0) + { + // Calculate the 3-D surface + // + // 2 2 + // z = x * y . + // + z = x * x * y * y; + + // Add this point. + dataset.Add (x, y, z); + } + + // The blank line is necessary at the end of each x value's data + // points for the 3-D surface grid to work. + dataset.AddEmptyLine (); + } + + // Add the dataset to the plot. + plot.AddDataset (dataset); + + // Open the plot file. + ofstream plotFile (plotFileName.c_str()); + + // Write the plot file. + plot.GenerateOutput (plotFile); + + // Close the plot file. + plotFile.close (); diff --git a/doc/manual/source/index.rst b/doc/manual/source/index.rst index aa235cfb4..0f7d8b260 100644 --- a/doc/manual/source/index.rst +++ b/doc/manual/source/index.rst @@ -28,6 +28,7 @@ This document is written in `reStructuredText