SNAP Library 4.0, Developer Reference  2017-07-27 13:18:06
SNAP, a general purpose, high performance system for analysis and manipulation of large networks
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
gnuplot.h
Go to the documentation of this file.
1 #ifndef gnuplot_h
2 #define gnuplot_h
3 
5 // GNU-Plot-Chart
6 typedef enum {
9 } TGpScaleTy;
10 
11 typedef enum {
14 } TGpSeriesTy;
15 
16 class TGnuPlot {
17 public:
19  static TStr GnuPlotPath;
21  static TStr GnuPlotFNm;
22  static TStr DefPlotFNm;
23  static TStr DefDataFNm;
24 private:
25  class TGpSeries {
26  public:
29  TFltV ZValV; // error bar and 3d plots
31  int XCol, YCol, ZCol;
32  public:
33  TGpSeries() : SeriesTy(gpwLines), XYValV(), ZValV(), Label(), WithStyle(), DataFNm(), XCol(0), YCol(0), ZCol(0) { }
34  TGpSeries(const TGpSeries& Gps);
35  TGpSeries& operator = (const TGpSeries& Gps);
36  bool operator < (const TGpSeries& Gps) const;
37  bool SaveXVals() const { return (YCol-XCol)==1; }
38  };
39  class TGpSeriesCmp {
40  private:
42  public:
43  TGpSeriesCmp(const TVec<TGpSeries>& _SeriesV) : SeriesV(_SeriesV) { }
44  bool operator () (const int& Left, const int& Right) const {
45  return SeriesV[Left] > SeriesV[Right]; }
46  };
47 private:
48  static int Tics42; // 1 - "set ticks", 0 - "set ticscale"
49  // -1 - unknown, -2 - not initialized
57 public:
58  static int GetTics42();
59 public:
60  TStr GetSeriesPlotStr(const int& PlotN);
61  int IsSameXCol(const int& CurId, const int& PrevId) const;
62  void CreatePlotFile(const TStr& Comment = TStr());
63  void RunGnuPlot() const;
64 public:
65  TGnuPlot(const TStr& FileNm="gplot", const TStr& PlotTitle=TStr(), const bool& Grid=true);
66  TGnuPlot(const TStr& DataFileNm, const TStr& PlotFileNm, const TStr& PlotTitle, const bool& Grid);
67  TGnuPlot(const TGnuPlot& GnuPlot);
68  TGnuPlot& operator = (const TGnuPlot& GnuPlot);
69 
70  void SetTitle(const TStr& PlotTitle) { Title = PlotTitle; }
71  void SetXLabel(const TStr& XLabel) { LblX = XLabel; }
72  void SetYLabel(const TStr& YLabel) { LblY = YLabel; }
73  void SetXYLabel(const TStr& XLabel, const TStr& YLabel) { LblX = XLabel; LblY = YLabel; }
74  void SetDataPlotFNm(const TStr& DatFNm, const TStr& PltFNm) { DataFNm = DatFNm; PlotFNm = PltFNm; }
75 
76  void ShowGrid(const bool& Show) { SetGrid = Show; }
77  void Pause(const bool& DoPause) { SetPause = DoPause; }
78  void SetScale(const TGpScaleTy& GpScaleTy) { ScaleTy = GpScaleTy;}
79  void SetXRange(const double& Min, const double& Max) { XRange = TFltPr(Min, Max); }
80  void SetYRange(const double& Min, const double& Max) { YRange = TFltPr(Min, Max); }
81  void AddCmd(const TStr& Cmd) { MoreCmds.Add(Cmd); }
82  TStr GetLineStyle(const int& PlotId) const { return SeriesV[PlotId].WithStyle; }
83  void SetLineStyle(const int& PlotId, const TStr& StyleStr) { SeriesV[PlotId].WithStyle = StyleStr; }
84 
85  int AddFunc(const TStr& FuncStr, const TGpSeriesTy& SeriesTy=gpwLinesPoints, const TStr& Label=TStr(), const TStr& Style=TStr());
86  int AddPlot(const TIntV& YValV, const TGpSeriesTy& SeriesTy=gpwLinesPoints, const TStr& Label=TStr(), const TStr& Style=TStr());
87  int AddPlot(const TFltV& YValV, const TGpSeriesTy& SeriesTy=gpwLinesPoints, const TStr& Label=TStr(), const TStr& Style=TStr());
88  int AddPlot(const TFltV& XValV, const TFltV& YValV, const TGpSeriesTy& SeriesTy=gpwLinesPoints, const TStr& Label=TStr(), const TStr& Style=TStr());
89  int AddPlot(const TIntPrV& XYValV, const TGpSeriesTy& SeriesTy=gpwLinesPoints, const TStr& Label=TStr(), const TStr& Style=TStr());
90  int AddPlot(const TFltPrV& XYValV, const TGpSeriesTy& SeriesTy=gpwLinesPoints, const TStr& Label=TStr(), const TStr& Style=TStr());
91  int AddPlot(const TIntKdV& XYValV, const TGpSeriesTy& SeriesTy=gpwLinesPoints, const TStr& Label=TStr(), const TStr& Style=TStr());
92  int AddPlot(const TFltKdV& XYValV, const TGpSeriesTy& SeriesTy=gpwLinesPoints, const TStr& Label=TStr(), const TStr& Style=TStr());
93  int AddPlot(const TIntFltKdV& XYValV, const TGpSeriesTy& SeriesTy=gpwLinesPoints, const TStr& Label=TStr(), const TStr& Style=TStr());
94  int AddPlot(const TIntFltPrV& XYValV, const TGpSeriesTy& SeriesTy=gpwLinesPoints, const TStr& Label=TStr(), const TStr& Style=TStr());
95  int AddPlot(const TStr& DataFNm, const int& ColY, const TGpSeriesTy& SeriesTy=gpwLinesPoints, const TStr& Label=TStr(), const TStr& Style=TStr());
96  int AddPlot(const TStr& DataFNm, const int& ColX, const int& ColY, const TGpSeriesTy& SeriesTy=gpwLinesPoints, const TStr& Label=TStr(), const TStr& Style=TStr());
97  template<class TKey, class TDat, class THashFunc>
98  int AddPlot(const THash<TKey, TDat, THashFunc>& XYValH, const TGpSeriesTy& SeriesTy=gpwLinesPoints, const TStr& Label=TStr(), const TStr& Style=TStr(), const bool& ExpBucket = false);
99  template<class TKey, class THashFunc>
100  int AddPlot(const THash<TKey, TMom, THashFunc>& ValMomH, const TGpSeriesTy& SeriesTy=gpwLinesPoints, const TStr& Label=TStr(), const TStr& Style=TStr(),
101  bool PlotAvg=true, bool PlotMed=true, bool PlotMin=false, bool PlotMax=false, bool PlotSDev=false, bool PlotStdErr=false, const bool& ExpBucket=false);
102 
103  int AddErrBar(const TFltTrV& XYDValV, const TStr& Label=TStr());
104  int AddErrBar(const TFltTrV& XYDValV, const TStr& DatLabel, const TStr& ErrLabel);
105  int AddErrBar(const TFltV& YValV, const TFltV& DeltaYV, const TStr& Label=TStr());
106  int AddErrBar(const TFltV& XValV, const TFltV& YValV, const TFltV& DeltaYV, const TStr& Label=TStr());
107  int AddErrBar(const TFltPrV& XYValV, const TFltV& DeltaYV, const TStr& Label=TStr());
108  int AddErrBar(const TFltKdV& XYValV, const TFltV& DeltaYV, const TStr& Label=TStr());
109  int AddErrBar(const TFltPrV& XYValV, const TFltV& DeltaYV, const TStr& DatLabel, const TStr& ErrLabel);
110 
111  int AddLinFit(const int& PlotId, const TGpSeriesTy& SeriesTy=gpwLines, const TStr& Style=TStr());
112  int AddPwrFit(const int& PlotId, const TGpSeriesTy& SeriesTy=gpwLines, const TStr& Style=TStr());
113  int AddPwrFit1(const int& PlotId, const TGpSeriesTy& SeriesTy=gpwLines, const TStr& Style=TStr());
114  int AddPwrFit2(const int& PlotId, const TGpSeriesTy& SeriesTy=gpwLines, const double& MinX=-1.0, const TStr& Style=TStr());
115  int AddPwrFit3(const int& PlotId, const TGpSeriesTy& SeriesTy=gpwLines, const double& MinX=-1.0, const TStr& Style=TStr());
116  int AddPwrFit3(const int& PlotId, const TGpSeriesTy& SeriesTy, const double& MinX, const TStr& Style, double& Intercept, double& Slope, double& R2);
117  int AddLogFit(const int& PlotId, const TGpSeriesTy& SeriesTy=gpwLines, const TStr& Style=TStr());
118  int AddExpFit(const int& PlotId, const TGpSeriesTy& SeriesTy=gpwLines, const double& FitXOffset=0.0, const TStr& Style=TStr());
119 
120  void SavePng(const int& SizeX=1000, const int& SizeY=800, const TStr& Comment=TStr()) {
121  SavePng(PlotFNm.GetFPath()+PlotFNm.GetFMid()+".png", SizeX, SizeY, Comment); }
122  void SavePng(const TStr& FNm, const int& SizeX=1000, const int& SizeY=800, const TStr& Comment=TStr(), const TStr& Terminal=TStr());
123  void SaveEps(const int& FontSz=30, const TStr& Comment=TStr()) {
124  SaveEps(PlotFNm.GetFPath()+PlotFNm.GetFMid()+".eps", FontSz, Comment); }
125  void SaveEps(const TStr& FNm, const int& FontSz=30, const TStr& Comment=TStr());
126  void Plot(const TStr& Comment=TStr()) { CreatePlotFile(Comment); RunGnuPlot(); }
127 
128  static void MakeExpBins(const TFltPrV& XYValV, TFltPrV& ExpXYValV,
129  const double& BinFactor = 2, const double& MinYVal = 1);
130  static void MakeExpBins(const TFltKdV& XYValV, TFltKdV& ExpXYValV,
131  const double& BinFactor = 2, const double& MinYVal = 1);
132  static void LoadTs(const TStr& FNm, TStrV& ColNmV, TVec<TFltKdV>& ColV);
133 
134  static TStr GetScaleStr(const TGpScaleTy& ScaleTy);
135  static TStr GetSeriesTyStr(const TGpSeriesTy& SeriesTy);
136 
137  // save tab separated
138  static void SaveTs(const TIntKdV& KdV, const TStr& FNm, const TStr& HeadLn = TStr());
139  static void SaveTs(const TIntFltKdV& KdV, const TStr& FNm, const TStr& HeadLn = TStr());
140  template <class TVal1, class TVal2>
141  static void SaveTs(const TVec<TPair<TVal1, TVal2> >& ValV, const TStr& FNm, const TStr& HeadLn = TStr());
142  template <class TVal1, class TVal2, class TVal3>
143  static void SaveTs(const TVec<TTriple<TVal1, TVal2, TVal3> >& ValV, const TStr& FNm, const TStr& HeadLn = TStr());
144  template <class TVal, int Vals>
145  static void SaveTs(const TVec<TTuple<TVal, Vals> >& ValV, const TStr& FNm, const TStr& HeadLn = TStr());
146  static void Test();
147 
148  // plot value-count tables, and pair vectors
149  template <class TVal1>
150  static void PlotValV(const TVec<TVal1>& ValV, const TStr& OutFNmPref, const TStr& Desc="",
151  const TStr& XLabel="", const TStr& YLabel="", const TGpScaleTy& ScaleTy=gpsAuto, const bool& PowerFit=false,
152  const TGpSeriesTy& SeriesTy=gpwLinesPoints);
153  template <class TVal1, class TVal2>
154  static void PlotValV(const TVec<TPair<TVal1, TVal2> >& ValV, const TStr& OutFNmPref, const TStr& Desc="",
155  const TStr& XLabel="", const TStr& YLabel="", const TGpScaleTy& ScaleTy=gpsAuto, const bool& PowerFit=false,
156  const TGpSeriesTy& SeriesTy=gpwLinesPoints);
157  template <class TVal1, class TVal2, class TVal3>
158  static void PlotValV(const TVec<TTriple<TVal1, TVal2, TVal3> >& ValV, const TStr& OutFNmPref, const TStr& Desc="",
159  const TStr& XLabel="", const TStr& YLabel="", const TGpScaleTy& ScaleTy=gpsAuto, const bool& PowerFit=false,
160  const TGpSeriesTy& SeriesTy=gpwLinesPoints, const TStr& ErrBarStr = "");
161  template <class TVal1, class TVal2>
162  static void PlotValV(const TVec<TPair<TVal1, TVal2> >& ValV1, const TStr& Name1,
163  const TVec<TPair<TVal1, TVal2> >& ValV2, const TStr& Name2, const TStr& OutFNmPref, const TStr& Desc="",
164  const TStr& XLabel="", const TStr& YLabel="", const TGpScaleTy& ScaleTy=gpsAuto, const bool& PowerFit=false,
165  const TGpSeriesTy& SeriesTy=gpwLinesPoints);
166  template <class TKey, class TVal, class THashFunc>
167  static void PlotValRank(const THash<TKey, TVal, THashFunc>& ValCntH, const TStr& OutFNmPref, const TStr& Desc="",
168  const TStr& XLabel="", const TStr& YLabel="", const TGpScaleTy& ScaleTy=gpsAuto, const bool& PowerFit=false,
169  const TGpSeriesTy& SeriesTy=gpwLinesPoints);
170  template <class TKey, class TVal, class THashFunc>
171  static void PlotValCntH(const THash<TKey, TVal, THashFunc>& ValCntH, const TStr& OutFNmPref, const TStr& Desc="",
172  const TStr& XLabel="", const TStr& YLabel="", const TGpScaleTy& ScaleTy=gpsAuto, const bool& PowerFit=false,
173  const TGpSeriesTy& SeriesTy=gpwLinesPoints, const bool& PlotCCDF=false, const bool& ExpBucket=false);
174  template <class TKey, class TVal, class THashFunc>
175  static void PlotValCntH(const THash<TKey, TVal, THashFunc>& ValCntH1, const TStr& Label1,
176  const THash<TKey, TVal, THashFunc>& ValCntH2, const TStr& Label2,
177  const TStr& OutFNmPref, const TStr& Desc, const TStr& XLabel, const TStr& YLabel,
178  const TGpScaleTy& ScaleTy=gpsAuto, const TGpSeriesTy& SeriesTy=gpwLinesPoints);
179  template <class TKey, class TVal, class THashFunc>
180  static void PlotValCntH(const THash<TKey, TVal, THashFunc>& ValCntH1, const TStr& Label1,
181  const THash<TKey, TVal, THashFunc>& ValCntH2, const TStr& Label2,
182  const THash<TKey, TVal, THashFunc>& ValCntH3, const TStr& Label3,
183  const TStr& OutFNmPref, const TStr& Desc, const TStr& XLabel, const TStr& YLabel,
184  const TGpScaleTy& ScaleTy=gpsAuto, const TGpSeriesTy& SeriesTy=gpwLinesPoints);
185  template <class TVal1>
186  static void PlotValMomH(const THash<TVal1, TMom>& ValMomH, const TStr& OutFNmPref, const TStr& Desc="",
187  const TStr& XLabel="", const TStr& YLabel="", const TGpScaleTy& ScaleTy=gpsAuto, const TGpSeriesTy& SeriesTy=gpwLinesPoints,
188  bool PlotAvg=true, bool PlotMed=true, bool PlotMin=false, bool PlotMax=false, bool PlotSDev=false, bool PlotStdErr=true, bool PlotScatter=false);
189  template <class TVal1>
190  static void PlotValMomH(const THash<TVal1, TMom>& ValMomH1, const TStr& Label1, const THash<TVal1, TMom>& ValMomH2, const TStr& Label2,
191  const TStr& OutFNmPref, const TStr& Desc="",
192  const TStr& XLabel="", const TStr& YLabel="", const TGpScaleTy& ScaleTy=gpsAuto, const TGpSeriesTy& SeriesTy=gpwLinesPoints,
193  bool PlotAvg=true, bool PlotMed=true, bool PlotMin=false, bool PlotMax=false, bool PlotSDev=false, bool PlotStdErr=true, bool PlotScatter=false);
194  template <class TVal2>
195  static void PlotValOverTm(const TVec<TPair<TSecTm, TVal2> >& ValV, const TStr& OutFNmPref, const TStr& Desc="",
196  const TStr& XLabel="", const TStr& YLabel="", const TGpScaleTy& ScaleTy=gpsAuto, const TGpSeriesTy& SeriesTy=gpwLinesPoints);
197  template <class TVal2>
198  static void PlotCntOverTm(const THash<TSecTm, TVal2>& CntH, const TStr& OutFNmPref, const TStr& Desc="",
199  const TStr& XLabel="", const TStr& YLabel="", const TGpScaleTy& ScaleTy=gpsAuto, const TGpSeriesTy& SeriesTy=gpwLinesPoints);
200 
201 };
202 
203 //---------------------------------------------------------
204 // useful commands
205 // set terminal png small size 800,600
206 // set terminal postscript enhanced eps 22
207 // set output 'hopsasa.png'
208 // set size 1,0.5
209 // set pointsize 0.9
210 // set key right bottom Left
211 // set style fill solid 0.2
212 // set ticscale 3 1 # longer axis tics
213 // plot ... with points pointtype 6 pointsize 1
214 // 1 + 7 (f) circle
215 // 2 cross 8 (o) triangle
216 // 3 * 9 (f) triangle
217 // 4 (o) square 10 (o) inverse-triangle
218 // 5 (f) square 11 (f) inverse-triangle
219 // 6 (o) circle 12 (o) diamond
220 // 13 (f) diamond
221 // set label "Text" at 23,47000
222 // set arrow from 28,45000 to 28,31000 lw 3
223 // axes x1y2: http://t16web.lanl.gov/Kawano/gnuplot/plot1-e.html#5.2
224 
225 template <class TVal1, class TVal2>
226 void TGnuPlot::SaveTs(const TVec<TPair<TVal1, TVal2> >& ValV, const TStr& FNm, const TStr& HeadLn) {
227  FILE *F = fopen(FNm.CStr(), "wt");
228  EAssert(F);
229  if (! HeadLn.Empty()) { fprintf(F, "# %s\n", HeadLn.CStr()); }
230  for (int i = 0; i < ValV.Len(); i++) {
231  fprintf(F, "%g\t%g\n", double(ValV[i].Val1), double(ValV[i].Val2)); }
232  fclose(F);
233 }
234 
235 template <class TVal1, class TVal2, class TVal3>
236 void TGnuPlot::SaveTs(const TVec<TTriple<TVal1, TVal2, TVal3> >& ValV, const TStr& FNm, const TStr& HeadLn) {
237  FILE *F = fopen(FNm.CStr(), "wt");
238  EAssert(F);
239  if (! HeadLn.Empty()) { fprintf(F, "# %s\n", HeadLn.CStr()); }
240  for (int i = 0; i < ValV.Len(); i++) {
241  fprintf(F, "%g\t%g\t%g\n", double(ValV[i].Val1), double(ValV[i].Val2), double(ValV[i].Val3)); }
242  fclose(F);
243 }
244 
245 template <class TVal, int Vals>
246 void TGnuPlot::SaveTs(const TVec<TTuple<TVal, Vals> >& ValV, const TStr& FNm, const TStr& HeadLn) {
247  FILE *F = fopen(FNm.CStr(), "wt");
248  EAssert(F);
249  if (! HeadLn.Empty()) { fprintf(F, "# %s\n", HeadLn.CStr()); }
250  for (int i = 0; i < ValV.Len(); i++) {
251  fprintf(F, "%g", double(ValV[i][0]));
252  for (int v = 1; v < Vals; v++) {
253  fprintf(F, "\t%g", double(ValV[i][v])); }
254  fprintf(F, "\n");
255  }
256  fclose(F);
257 }
258 
259 template<class TKey, class TDat, class THashFunc>
260 int TGnuPlot::AddPlot(const THash<TKey, TDat, THashFunc>& XYValH, const TGpSeriesTy& SeriesTy, const TStr& Label, const TStr& Style, const bool& ExpBucket) {
261  TFltPrV XYFltValV(XYValH.Len(), 0);
262  for (int k = XYValH.FFirstKeyId(); XYValH.FNextKeyId(k); ) {
263  XYFltValV.Add(TFltPr(TFlt(XYValH.GetKey(k)), TFlt(XYValH[k])));
264  }
265  XYFltValV.Sort();
266  if (ExpBucket) {
267  TFltPrV BucketV;
268  TGnuPlot::MakeExpBins(XYFltValV, BucketV);
269  BucketV.Swap(XYFltValV);
270  }
271  return AddPlot(XYFltValV, SeriesTy, Label, Style);
272 }
273 
274 template<class TKey, class THashFunc>
275 int TGnuPlot::AddPlot(const THash<TKey, TMom, THashFunc>& ValMomH, const TGpSeriesTy& SeriesTy, const TStr& Label, const TStr& Style, bool PlotAvg, bool PlotMed, bool PlotMin, bool PlotMax, bool PlotSDev, bool PlotStdErr, const bool& ExpBucket) {
276  TFltTrV AvgV, StdErrV;
277  TFltPrV AvgV2, MedV, MinV, MaxV, BucketV;
278  for (int i = ValMomH.FFirstKeyId(); ValMomH.FNextKeyId(i); ) {
279  TMom Mom(ValMomH[i]);
280  if (! Mom.IsDef()) { Mom.Def(); }
281  const double x = ValMomH.GetKey(i);
282  if (PlotAvg) {
283  if (PlotSDev) {
284  AvgV.Add(TFltTr(x, Mom.GetMean(), Mom.GetSDev())); } // std deviation
285  else if (PlotStdErr) {
286  StdErrV.Add(TFltTr(x, Mom.GetMean(), Mom.GetSDev()/sqrt((double)Mom.GetVals())));
287  } else {
288  AvgV2.Add(TFltPr(x, Mom.GetMean()));
289  }
290  }
291  if (PlotMed) { MedV.Add(TFltPr(x, Mom.GetMedian())); }
292  if (PlotMin) { MinV.Add(TFltPr(x, Mom.GetMn())); }
293  if (PlotMax) { MaxV.Add(TFltPr(x, Mom.GetMx())); }
294  }
295  AvgV.Sort(); AvgV2.Sort();
296  MedV.Sort(); MinV.Sort(); MaxV.Sort();
297  int PlotId=0;
298  // exponential bucketing
299  if (ExpBucket) {
300  if (! AvgV2.Empty()) { TGnuPlot::MakeExpBins(AvgV2, BucketV); BucketV.Swap(AvgV2); }
301  if (! MedV.Empty()) { TGnuPlot::MakeExpBins(MedV, BucketV); BucketV.Swap(MedV); }
302  if (! MinV.Empty()) { TGnuPlot::MakeExpBins(MinV, BucketV); BucketV.Swap(MinV); }
303  if (! MaxV.Empty()) { TGnuPlot::MakeExpBins(MaxV, BucketV); BucketV.Swap(MaxV); }
304  }
305  // plot
306  if (! AvgV.Empty()) { PlotId = AddErrBar(AvgV, Label+" Average", Label+" StdDev"); }
307  if (! AvgV2.Empty()) { PlotId = AddPlot(AvgV2, SeriesTy, Label+" Average", Style); }
308  if (! MedV.Empty()) { PlotId = AddPlot(MedV, SeriesTy, Label+" Median", Style); }
309  if (! MinV.Empty()) { PlotId = AddPlot(MinV, SeriesTy, Label+" Min", Style); }
310  if (! MaxV.Empty()) { PlotId = AddPlot(MaxV, SeriesTy, Label+" Max", Style); }
311  if (! StdErrV.Empty()) { PlotId = AddErrBar(StdErrV, Label+" Average", Label+" StdErr"); }
312  return PlotId;
313 }
314 
315 template <class TVal1, class TVal2>
316 void TGnuPlot::PlotValV(const TVec<TPair<TVal1, TVal2> >& ValV, const TStr& OutFNmPref, const TStr& Desc,
317  const TStr& XLabel, const TStr& YLabel, const TGpScaleTy& ScaleTy, const bool& PowerFit, const TGpSeriesTy& SeriesTy) {
318  TFltKdV IdCntV(ValV.Len(), 0);
319  for (int i = 0; i < ValV.Len(); i++) {
320  IdCntV.Add(TFltKd(double(ValV[i].Val1), double(ValV[i].Val2))); }
321  if (IdCntV.Empty()) { printf("*** Empty plot %s\n", OutFNmPref.CStr()); return; }
322  IdCntV.Sort();
323  TGnuPlot GP(OutFNmPref, Desc);
324  GP.SetXYLabel(XLabel, YLabel);
325  GP.SetScale(ScaleTy);
326  const int Id = GP.AddPlot(IdCntV, SeriesTy);
327  if (PowerFit) {
328  GP.AddPwrFit3(Id);
329  double MaxY = IdCntV.Last().Dat, MinY = IdCntV[0].Dat;
330  if (MaxY < MinY) { Swap(MaxY, MinY); }
331  //GP.SetYRange(MinY, pow(10.0, floor(log10(MaxY))+1.0));
332  GP.AddCmd(TStr::Fmt("set yrange[%f:]", MinY));
333  }
334  GP.SavePng();
335 }
336 
337 template <class TVal1, class TVal2, class TVal3>
338 void TGnuPlot::PlotValV(const TVec<TTriple<TVal1, TVal2, TVal3> >& ValV, const TStr& OutFNmPref, const TStr& Desc,
339  const TStr& XLabel, const TStr& YLabel, const TGpScaleTy& ScaleTy, const bool& PowerFit,
340  const TGpSeriesTy& SeriesTy, const TStr& ErrBarStr) {
341  TFltKdV IdCntV(ValV.Len(), 0);
342  TFltV DeltaYV(ValV.Len(), 0);
343  for (int i = 0; i < ValV.Len(); i++) {
344  IdCntV.Add(TFltKd(double(ValV[i].Val1), double(ValV[i].Val2)));
345  DeltaYV.Add(double(ValV[i].Val3));
346  }
347  if (IdCntV.Empty()) { printf("*** Empty plot %s\n", OutFNmPref.CStr()); return; }
348  IdCntV.Sort();
349  TGnuPlot GP(OutFNmPref, Desc);
350  GP.SetXYLabel(XLabel, YLabel);
351  GP.SetScale(ScaleTy);
352  const int Id = GP.AddPlot(IdCntV, SeriesTy);
353  GP.AddErrBar(IdCntV, DeltaYV, ErrBarStr);
354  if (PowerFit) {
355  GP.AddPwrFit3(Id);
356  double MaxY = IdCntV.Last().Dat, MinY = IdCntV[0].Dat;
357  if (MaxY < MinY) { Swap(MaxY, MinY); }
358  //GP.SetYRange(MinY, pow(10.0, floor(log10(MaxY))+1.0));
359  GP.AddCmd(TStr::Fmt("set yrange[%f:]", MinY));
360  }
361  GP.SavePng();
362 }
363 
364 template <class TVal1, class TVal2>
365 void TGnuPlot::PlotValV(const TVec<TPair<TVal1, TVal2> >& ValV1, const TStr& Name1,
366  const TVec<TPair<TVal1, TVal2> >& ValV2, const TStr& Name2,
367  const TStr& OutFNmPref, const TStr& Desc, const TStr& XLabel, const TStr& YLabel,
368  const TGpScaleTy& ScaleTy, const bool& PowerFit, const TGpSeriesTy& SeriesTy) {
369  TFltKdV IdCntV1(ValV1.Len(), 0), IdCntV2(ValV2.Len(), 0);
370  for (int i = 0; i < ValV1.Len(); i++) {
371  IdCntV1.Add(TFltKd(double(ValV1[i].Val1), double(ValV1[i].Val2))); }
372  for (int i = 0; i < ValV2.Len(); i++) {
373  IdCntV2.Add(TFltKd(double(ValV2[i].Val1), double(ValV2[i].Val2))); }
374  if (IdCntV1.Empty() || IdCntV2.Empty()) { printf("*** Empty plot %s\n", OutFNmPref.CStr()); return; }
375  IdCntV1.Sort();
376  IdCntV2.Sort();
377  TGnuPlot GP(OutFNmPref, Desc);
378  GP.SetXYLabel(XLabel, YLabel);
379  GP.SetScale(ScaleTy);
380  { const int Id = GP.AddPlot(IdCntV1, SeriesTy, Name1);
381  if (PowerFit) {
382  GP.AddPwrFit3(Id);
383  double MaxY = IdCntV1.Last().Dat, MinY = IdCntV1[0].Dat;
384  if (MaxY < MinY) { Swap(MaxY, MinY); }
385  GP.AddCmd(TStr::Fmt("set yrange[%f:]", MinY));
386  } }
387  { const int Id = GP.AddPlot(IdCntV2, SeriesTy, Name2);
388  if (PowerFit) {
389  GP.AddPwrFit3(Id);
390  double MaxY = IdCntV2.Last().Dat, MinY = IdCntV2[0].Dat;
391  if (MaxY < MinY) { Swap(MaxY, MinY); }
392  GP.AddCmd(TStr::Fmt("set yrange[%f:]", MinY));
393  } }
394  GP.SavePng();
395 }
396 
397 template <class TVal1>
398 void TGnuPlot::PlotValV(const TVec<TVal1>& ValV, const TStr& OutFNmPref, const TStr& Desc, const TStr& XLabel,
399  const TStr& YLabel, const TGpScaleTy& ScaleTy, const bool& PowerFit, const TGpSeriesTy& SeriesTy) {
400  TFltKdV IdCntV(ValV.Len(), 0);
401  for (int i = 0; i < ValV.Len(); i++) {
402  IdCntV.Add(TFltKd(double(i+1), double(ValV[i]))); }
403  if (IdCntV.Empty()) { printf("*** Empty plot %s\n", OutFNmPref.CStr()); return; }
404  IdCntV.Sort();
405  TGnuPlot GP(OutFNmPref, Desc);
406  GP.SetXYLabel(XLabel, YLabel);
407  GP.SetScale(ScaleTy);
408  const int Id = GP.AddPlot(IdCntV, SeriesTy);
409  if (PowerFit) {
410  GP.AddPwrFit3(Id);
411  double MaxY = IdCntV.Last().Dat, MinY = IdCntV[0].Dat;
412  if (MaxY < MinY) { Swap(MaxY, MinY); }
413  //GP.SetYRange(MinY, pow(10.0, floor(log10(MaxY))+1.0));
414  GP.AddCmd(TStr::Fmt("set yrange[%f:]", MinY));
415  }
416  GP.SavePng();
417 }
418 
419 template <class TKey, class TVal, class THashFunc>
420 void TGnuPlot::PlotValRank(const THash<TKey, TVal, THashFunc>& ValCntH, const TStr& OutFNmPref, const TStr& Desc,
421  const TStr& XLabel, const TStr& YLabel, const TGpScaleTy& ScaleTy, const bool& PowerFit, const TGpSeriesTy& SeriesTy) {
422  TFltPrV IdCntV(ValCntH.Len(), 0);
423  TFltV ValV(ValCntH.Len(), 0);
424  for (int i = ValCntH.FFirstKeyId(); ValCntH.FNextKeyId(i); ) {
425  ValV.Add(double(ValCntH[i])); }
426  ValV.Sort(false);
427  for (int i = 0; i < ValV.Len(); i++) {
428  IdCntV.Add(TFltPr(i+1, ValV[i]));
429  }
430  PlotValV(IdCntV, OutFNmPref, Desc, XLabel, YLabel, ScaleTy, PowerFit, SeriesTy);
431 }
432 
433 template <class TKey, class TVal, class THashFunc>
434 void TGnuPlot::PlotValCntH(const THash<TKey, TVal, THashFunc>& ValCntH, const TStr& OutFNmPref, const TStr& Desc,
435  const TStr& XLabel, const TStr& YLabel, const TGpScaleTy& ScaleTy, const bool& PowerFit,
436  const TGpSeriesTy& SeriesTy, const bool& PlotCCDF, const bool& ExpBucket) {
437  TFltPrV IdCntV(ValCntH.Len(), 0), BucketV;
438  for (int i = ValCntH.FFirstKeyId(); ValCntH.FNextKeyId(i); ) {
439  IdCntV.Add(TFltPr(double(ValCntH.GetKey(i)), double(ValCntH[i]))); }
440  IdCntV.Sort();
441  if (ExpBucket) {
442  TGnuPlot::MakeExpBins(IdCntV, BucketV);
443  BucketV.Swap(IdCntV);
444  }
445  if (PlotCCDF) {
446  TFltPrV NCdfV = IdCntV;
447  for (int i = NCdfV.Len()-2; i >= 0; i--) {
448  NCdfV[i].Val2 = NCdfV[i].Val2 + NCdfV[i+1].Val2;
449  }
450  PlotValV(NCdfV, OutFNmPref, Desc, "NCDF "+XLabel, "NCDF "+YLabel, ScaleTy, PowerFit, SeriesTy);
451  } else {
452  PlotValV(IdCntV, OutFNmPref, Desc, XLabel, YLabel, ScaleTy, PowerFit, SeriesTy);
453  }
454 }
455 
456 template <class TKey, class TVal, class THashFunc>
457 void TGnuPlot::PlotValCntH(const THash<TKey, TVal, THashFunc>& ValCntH1, const TStr& Label1,
458  const THash<TKey, TVal, THashFunc>& ValCntH2, const TStr& Label2,
459  const TStr& OutFNmPref, const TStr& Desc, const TStr& XLabel, const TStr& YLabel,
460  const TGpScaleTy& ScaleTy, const TGpSeriesTy& SeriesTy) {
461  PlotValCntH(ValCntH1, Label1, ValCntH2, Label2, THash<TKey, TVal, THashFunc>(), "", OutFNmPref, Desc, XLabel, YLabel,
462  ScaleTy, SeriesTy);
463 }
464 
465 template <class TKey, class TVal, class THashFunc>
466 void TGnuPlot::PlotValCntH(const THash<TKey, TVal, THashFunc>& ValCntH1, const TStr& Label1,
467  const THash<TKey, TVal, THashFunc>& ValCntH2, const TStr& Label2,
468  const THash<TKey, TVal, THashFunc>& ValCntH3, const TStr& Label3,
469  const TStr& OutFNmPref, const TStr& Desc, const TStr& XLabel, const TStr& YLabel,
470  const TGpScaleTy& ScaleTy, const TGpSeriesTy& SeriesTy) {
471  TFltPrV IdCntV1(ValCntH1.Len(), 0), IdCntV2(ValCntH2.Len(), 0), IdCntV3(ValCntH3.Len(), 0);
472  for (int i = ValCntH1.FFirstKeyId(); ValCntH1.FNextKeyId(i); ) {
473  IdCntV1.Add(TFltPr(double(ValCntH1.GetKey(i)), double(ValCntH1[i]))); }
474  for (int i = ValCntH2.FFirstKeyId(); ValCntH2.FNextKeyId(i); ) {
475  IdCntV2.Add(TFltPr(double(ValCntH2.GetKey(i)), double(ValCntH2[i]))); }
476  for (int i = ValCntH3.FFirstKeyId(); ValCntH3.FNextKeyId(i); ) {
477  IdCntV3.Add(TFltPr(double(ValCntH3.GetKey(i)), double(ValCntH3[i]))); }
478  IdCntV1.Sort();
479  IdCntV2.Sort();
480  IdCntV3.Sort();
481  TGnuPlot GP(OutFNmPref, Desc);
482  GP.SetXYLabel(XLabel, YLabel);
483  GP.SetScale(ScaleTy);
484  if (! IdCntV1.Empty()) { GP.AddPlot(IdCntV1, SeriesTy, Label1); }
485  if (! IdCntV2.Empty()) { GP.AddPlot(IdCntV2, SeriesTy, Label2); }
486  if (! IdCntV3.Empty()) { GP.AddPlot(IdCntV3, SeriesTy, Label3); }
487  GP.SavePng();
488 }
489 
490 template <class TVal1>
491 void TGnuPlot::PlotValMomH(const THash<TVal1, TMom>& ValMomH, const TStr& OutFNmPref, const TStr& Desc,
492  const TStr& XLabel, const TStr& YLabel, const TGpScaleTy& ScaleTy, const TGpSeriesTy& SeriesTy,
493  bool PlotAvg, bool PlotMed, bool PlotMin, bool PlotMax, bool PlotSDev, bool PlotStdErr,
494  bool PlotScatter) {
495  TFltTrV AvgV, StdErrV;
496  TFltPrV AvgV2, MedV, MinV, MaxV;
497  TFltPrV ScatterV;
498  for (int i = ValMomH.FFirstKeyId(); ValMomH.FNextKeyId(i); ) {
499  TMom Mom(ValMomH[i]);
500  if (! Mom.IsDef()) { Mom.Def(); }
501  const double x = ValMomH.GetKey(i);
502  if (PlotAvg) {
503  if (PlotSDev) {
504  AvgV.Add(TFltTr(x, Mom.GetMean(), Mom.GetSDev())); } // std deviation
505  else {
506  AvgV2.Add(TFltPr(x, Mom.GetMean()));
507  }
508  if (PlotStdErr) {
509  StdErrV.Add(TFltTr(x, Mom.GetMean(), Mom.GetSDev()/sqrt((double)Mom.GetVals())));
510  }
511  }
512  if (PlotMed) { MedV.Add(TFltPr(x, Mom.GetMedian())); }
513  if (PlotMin) { MinV.Add(TFltPr(x, Mom.GetMn())); }
514  if (PlotMax) { MaxV.Add(TFltPr(x, Mom.GetMx())); }
515  if (PlotScatter) {
516  THashSet<TFlt> PointSet;
517  for (int xi = 0; xi < ValMomH[i].GetVals(); xi++) {
518  PointSet.AddKey(ValMomH[i].GetVal(xi)); }
519  //ScatterV.Add(TFltPr(x, ValMomH[i].GetVal(xi))); }
520  for (int xi = 0; xi < PointSet.Len(); xi++) {
521  ScatterV.Add(TFltPr(x, PointSet[xi])); }
522  //printf("S%d %d %d.", ValMomH[i].GetVals(), PointSet.Len(), ScatterV.Len());
523  }
524  }
525  AvgV.Sort(); AvgV2.Sort();
526  MedV.Sort(); MinV.Sort(); MaxV.Sort(); StdErrV.Sort();
527  TGnuPlot GP(OutFNmPref, Desc);
528  GP.SetScale(ScaleTy);
529  GP.SetXYLabel(XLabel, YLabel);
530  if (! ScatterV.Empty()) { GP.AddPlot(ScatterV, gpwPoints, "Scatter"); }
531  if (! AvgV.Empty()) { GP.AddErrBar(AvgV, "Average", "StdDev"); }
532  if (! AvgV2.Empty()) { GP.AddPlot(AvgV2, SeriesTy, "Average"); }
533  if (! MedV.Empty()) { GP.AddPlot(MedV, SeriesTy, "Median"); }
534  if (! MinV.Empty()) { GP.AddPlot(MinV, SeriesTy, "Min"); }
535  if (! MaxV.Empty()) { GP.AddPlot(MaxV, SeriesTy, "Max"); }
536  if (! StdErrV.Empty()) { GP.AddErrBar(StdErrV, "Standard error"); }
537  GP.SavePng();
538 }
539 
540 template <class TVal1>
541 void TGnuPlot::PlotValMomH(const THash<TVal1, TMom>& ValMomH1, const TStr& Label1,
542  const THash<TVal1, TMom>& ValMomH2, const TStr& Label2,
543  const TStr& OutFNmPref, const TStr& Desc, const TStr& XLabel,
544  const TStr& YLabel, const TGpScaleTy& ScaleTy, const TGpSeriesTy& SeriesTy, bool PlotAvg,
545  bool PlotMed, bool PlotMin, bool PlotMax, bool PlotSDev, bool PlotStdErr, bool PlotScatter) {
546  TFltTrV AvgV1, AvgV2, StdErrV1, StdErrV2;
547  TFltPrV AvgVM1, MedV1, MinV1, MaxV1;
548  TFltPrV AvgVM2, MedV2, MinV2, MaxV2;
549  TFltPrV ScatterV1, ScatterV2;
550  // ValMom1
551  for (int i = ValMomH1.FFirstKeyId(); ValMomH1.FNextKeyId(i); ) {
552  TMom Mom(ValMomH1[i]);
553  if (! Mom.IsDef()) { Mom.Def(); }
554  const double x = ValMomH1.GetKey(i);
555  if (PlotAvg) {
556  if (PlotSDev) {
557  AvgV1.Add(TFltTr(x, Mom.GetMean(), Mom.GetSDev())); } // std deviation
558  else {
559  AvgVM1.Add(TFltPr(x, Mom.GetMean()));
560  }
561  if (PlotStdErr) {
562  StdErrV1.Add(TFltTr(x, Mom.GetMean(), Mom.GetSDev()/sqrt((double)Mom.GetVals())));
563  }
564  }
565  if (PlotMed) { MedV1.Add(TFltPr(x, Mom.GetMedian())); }
566  if (PlotMin) { MinV1.Add(TFltPr(x, Mom.GetMn())); }
567  if (PlotMax) { MaxV1.Add(TFltPr(x, Mom.GetMx())); }
568  if (PlotScatter) {
569  THashSet<TFlt> PointSet;
570  for (int xi = 0; xi < ValMomH1[i].GetVals(); xi++) {
571  PointSet.AddKey(ValMomH1[i].GetVal(xi)); }
572  for (int xi = 0; xi < PointSet.Len(); xi++) {
573  ScatterV1.Add(TFltPr(x, PointSet[xi])); }
574  }
575  }
576  AvgV1.Sort(); AvgVM1.Sort(); MedV1.Sort(); MinV1.Sort(); MaxV1.Sort(); StdErrV1.Sort();
577  // ValMom2
578  for (int i = ValMomH2.FFirstKeyId(); ValMomH2.FNextKeyId(i); ) {
579  TMom Mom(ValMomH2[i]);
580  if (! Mom.IsDef()) { Mom.Def(); }
581  const double x = ValMomH2.GetKey(i);
582  if (PlotAvg) {
583  if (PlotSDev) {
584  AvgV2.Add(TFltTr(x, Mom.GetMean(), Mom.GetSDev())); } // std deviation
585  else {
586  AvgVM2.Add(TFltPr(x, Mom.GetMean()));
587  }
588  if (PlotStdErr) {
589  StdErrV2.Add(TFltTr(x, Mom.GetMean(), Mom.GetSDev()/sqrt((double)Mom.GetVals())));
590  }
591  }
592  if (PlotMed) { MedV2.Add(TFltPr(x, Mom.GetMedian())); }
593  if (PlotMin) { MinV2.Add(TFltPr(x, Mom.GetMn())); }
594  if (PlotMax) { MaxV2.Add(TFltPr(x, Mom.GetMx())); }
595  if (PlotScatter) {
596  THashSet<TFlt> PointSet;
597  for (int xi = 0; xi < ValMomH2[i].GetVals(); xi++) {
598  PointSet.AddKey(ValMomH2[i].GetVal(xi)); }
599  for (int xi = 0; xi < PointSet.Len(); xi++) {
600  ScatterV2.Add(TFltPr(x, PointSet[xi])); }
601  }
602  }
603  AvgV2.Sort(); AvgVM2.Sort(); MedV2.Sort(); MinV2.Sort(); MaxV2.Sort(); StdErrV2.Sort();
604  // plot
605  TGnuPlot GP(OutFNmPref, Desc);
606  GP.SetScale(ScaleTy);
607  GP.SetXYLabel(XLabel, YLabel);
608  // ValMom1
609  if (! ScatterV1.Empty()) { GP.AddPlot(ScatterV1, gpwPoints, Label1+": Scatter"); }
610  if (! AvgV1.Empty()) { GP.AddErrBar(AvgV1, Label1+": Average", Label1+": StdDev"); }
611  if (! AvgVM1.Empty()) { GP.AddPlot(AvgVM1, SeriesTy, Label1+": Average"); }
612  if (! MedV1.Empty()) { GP.AddPlot(MedV1, SeriesTy, Label1+": Median"); }
613  if (! MinV1.Empty()) { GP.AddPlot(MinV1, SeriesTy, Label1+": Min"); }
614  if (! MaxV1.Empty()) { GP.AddPlot(MaxV1, SeriesTy, Label1+": Max"); }
615  if (! StdErrV1.Empty()) { GP.AddErrBar(StdErrV1, Label1+": Std error"); }
616  // ValMom2
617  if (! ScatterV2.Empty()) { GP.AddPlot(ScatterV2, gpwPoints, Label2+": Scatter"); }
618  if (! AvgV2.Empty()) { GP.AddErrBar(AvgV2, Label2+": Average", Label2+": StdDev"); }
619  if (! AvgVM2.Empty()) { GP.AddPlot(AvgVM2, SeriesTy, Label2+": Average"); }
620  if (! MedV2.Empty()) { GP.AddPlot(MedV2, SeriesTy, Label2+": Median"); }
621  if (! MinV2.Empty()) { GP.AddPlot(MinV2, SeriesTy, Label2+": Min"); }
622  if (! MaxV2.Empty()) { GP.AddPlot(MaxV2, SeriesTy, Label2+": Max"); }
623  if (! StdErrV2.Empty()) { GP.AddErrBar(StdErrV2, Label2+": Std error"); }
624  GP.SavePng();
625 }
626 
627 template <class TVal2>
628 void TGnuPlot::PlotValOverTm(const TVec<TPair<TSecTm, TVal2> >& ValV, const TStr& OutFNmPref, const TStr& Desc,
629  const TStr& XLabel, const TStr& YLabel, const TGpScaleTy& ScaleTy, const TGpSeriesTy& SeriesTy) {
630  if (ValV.Empty()) { printf("*** Empty plot %s\n", OutFNmPref.CStr()); return; }
631  TVec<TPair<TSecTm, TVal2> > TmpV = ValV;
632  TmpV.Sort();
633  TGnuPlot GP(OutFNmPref, Desc);
634  GP.SetXYLabel(XLabel, YLabel);
635  GP.SetScale(ScaleTy);
636  GP.AddCmd("set xdata time");
637  GP.AddCmd("set timefmt \"%Y-%m-%d-%H:%M:%S\"");
638  GP.AddCmd("set format x \"%Y-%m-%d\\n%H:%M:%S\"");
639 
640  // save file
641  time_t ltime; time(&ltime);
642  char* TimeStr = ctime(&ltime); TimeStr[strlen(TimeStr) - 1] = 0;
643  FILE *F = fopen(GP.DataFNm.CStr(), "wt");
644  fprintf(F, "#\n");
645  fprintf(F, "# %s (%s)\n", Desc.CStr(), TimeStr);
646  fprintf(F, "#\n");
647  fprintf(F, "#Time\t%s\n", XLabel.CStr());
648  for (int i = 0; i < TmpV.Len(); i++) {
649  fprintf(F, "%s\t%g\n", TmpV[i].Val1.GetYmdTmStr2().CStr(), double(TmpV[i].Val2()));
650  }
651  fclose(F);
652  // plot data
653  GP.AddPlot(GP.DataFNm, 1, 2);
654  GP.SavePng();
655 }
656 
657 template <class TVal2>
658 void TGnuPlot::PlotCntOverTm(const THash<TSecTm, TVal2>& CntH, const TStr& OutFNmPref, const TStr& Desc,
659  const TStr& XLabel, const TStr& YLabel, const TGpScaleTy& ScaleTy, const TGpSeriesTy& SeriesTy) {
661  CntH.GetKeyDatPrV(TmpV);
662  PlotValOverTm(TmpV, OutFNmPref, Desc, XLabel, YLabel, ScaleTy, SeriesTy);
663 }
664 
665 #endif
666 
TGnuPlot & operator=(const TGnuPlot &GnuPlot)
Definition: gnuplot.cpp:106
int AddLinFit(const int &PlotId, const TGpSeriesTy &SeriesTy=gpwLines, const TStr &Style=TStr())
Definition: gnuplot.cpp:339
TFltPr XRange
Definition: gnuplot.h:53
int AddExpFit(const int &PlotId, const TGpSeriesTy &SeriesTy=gpwLines, const double &FitXOffset=0.0, const TStr &Style=TStr())
Definition: gnuplot.cpp:550
void SetLineStyle(const int &PlotId, const TStr &StyleStr)
Definition: gnuplot.h:83
TStr Title
Definition: gnuplot.h:51
TStr GetFMid() const
Definition: dt.cpp:1403
static void PlotValOverTm(const TVec< TPair< TSecTm, TVal2 > > &ValV, const TStr &OutFNmPref, const TStr &Desc="", const TStr &XLabel="", const TStr &YLabel="", const TGpScaleTy &ScaleTy=gpsAuto, const TGpSeriesTy &SeriesTy=gpwLinesPoints)
Definition: gnuplot.h:628
bool operator<(const TGpSeries &Gps) const
Definition: gnuplot.cpp:82
TGpSeriesTy SeriesTy
Definition: gnuplot.h:27
void SetXRange(const double &Min, const double &Max)
Definition: gnuplot.h:79
double GetMedian() const
Definition: xmath.h:244
Definition: ds.h:272
Definition: ds.h:130
static void MakeExpBins(const TFltPrV &XYValV, TFltPrV &ExpXYValV, const double &BinFactor=2, const double &MinYVal=1)
Definition: gnuplot.cpp:614
TStr GetFPath() const
Definition: dt.cpp:1389
void SavePng(const int &SizeX=1000, const int &SizeY=800, const TStr &Comment=TStr())
Definition: gnuplot.h:120
TStr DataFNm
Definition: gnuplot.h:50
int GetVals() const
Definition: xmath.h:220
bool IsDef() const
Definition: xmath.h:214
TGnuPlot(const TStr &FileNm="gplot", const TStr &PlotTitle=TStr(), const bool &Grid=true)
Definition: gnuplot.cpp:86
void SetTitle(const TStr &PlotTitle)
Definition: gnuplot.h:70
void SetYLabel(const TStr &YLabel)
Definition: gnuplot.h:72
TGpSeriesCmp(const TVec< TGpSeries > &_SeriesV)
Definition: gnuplot.h:43
TSizeTy Len() const
Returns the number of elements in the vector.
Definition: ds.h:575
bool operator()(const int &Left, const int &Right) const
Definition: gnuplot.h:44
void SetXYLabel(const TStr &XLabel, const TStr &YLabel)
Definition: gnuplot.h:73
static int GetTics42()
Definition: gnuplot.cpp:26
int AddPwrFit3(const int &PlotId, const TGpSeriesTy &SeriesTy=gpwLines, const double &MinX=-1.0, const TStr &Style=TStr())
Definition: gnuplot.cpp:467
Definition: xmath.h:129
static void PlotCntOverTm(const THash< TSecTm, TVal2 > &CntH, const TStr &OutFNmPref, const TStr &Desc="", const TStr &XLabel="", const TStr &YLabel="", const TGpScaleTy &ScaleTy=gpsAuto, const TGpSeriesTy &SeriesTy=gpwLinesPoints)
Definition: gnuplot.h:658
TKeyDat< TFlt, TFlt > TFltKd
Definition: ds.h:396
void SetDataPlotFNm(const TStr &DatFNm, const TStr &PltFNm)
Definition: gnuplot.h:74
TGpSeries & operator=(const TGpSeries &Gps)
Definition: gnuplot.cpp:70
void Plot(const TStr &Comment=TStr())
Definition: gnuplot.h:126
TStr LblY
Definition: gnuplot.h:51
TVec< TGpSeries > SeriesV
Definition: gnuplot.h:55
void SetYRange(const double &Min, const double &Max)
Definition: gnuplot.h:80
Definition: gnuplot.h:7
double GetSDev() const
Definition: xmath.h:242
int AddPwrFit(const int &PlotId, const TGpSeriesTy &SeriesTy=gpwLines, const TStr &Style=TStr())
Definition: gnuplot.cpp:370
Definition: dt.h:1383
bool Empty() const
Tests whether the vector is empty.
Definition: ds.h:570
static void LoadTs(const TStr &FNm, TStrV &ColNmV, TVec< TFltKdV > &ColV)
Definition: gnuplot.cpp:665
static void PlotValMomH(const THash< TVal1, TMom > &ValMomH, const TStr &OutFNmPref, const TStr &Desc="", const TStr &XLabel="", const TStr &YLabel="", const TGpScaleTy &ScaleTy=gpsAuto, const TGpSeriesTy &SeriesTy=gpwLinesPoints, bool PlotAvg=true, bool PlotMed=true, bool PlotMin=false, bool PlotMax=false, bool PlotSDev=false, bool PlotStdErr=true, bool PlotScatter=false)
Definition: gnuplot.h:491
void Swap(TVec< TVal, TSizeTy > &Vec)
Swaps the contents of the vector with Vec.
Definition: ds.h:1101
static void SaveTs(const TIntKdV &KdV, const TStr &FNm, const TStr &HeadLn=TStr())
Definition: gnuplot.cpp:717
void AddCmd(const TStr &Cmd)
Definition: gnuplot.h:81
double GetMx() const
Definition: xmath.h:238
void Sort(const bool &Asc=true)
Sorts the elements of the vector.
Definition: ds.h:1318
Definition: gnuplot.h:7
TStr GetLineStyle(const int &PlotId) const
Definition: gnuplot.h:82
TFltKdV XYValV
Definition: gnuplot.h:28
static TStr GetSeriesTyStr(const TGpSeriesTy &SeriesTy)
Definition: gnuplot.cpp:699
const TVec< TGpSeries > & SeriesV
Definition: gnuplot.h:41
bool FNextKeyId(int &KeyId) const
Definition: hash.h:478
bool SetPause
Definition: gnuplot.h:54
int AddLogFit(const int &PlotId, const TGpSeriesTy &SeriesTy=gpwLines, const TStr &Style=TStr())
Definition: gnuplot.cpp:519
bool SetGrid
Definition: gnuplot.h:54
void Pause(const bool &DoPause)
Definition: gnuplot.h:77
int AddKey(const TKey &Key)
Definition: shash.h:1254
int FFirstKeyId() const
Definition: hash.h:278
TTriple< TFlt, TFlt, TFlt > TFltTr
Definition: ds.h:181
bool SaveXVals() const
Definition: gnuplot.h:37
TPair< TFlt, TFlt > TFltPr
Definition: ds.h:99
void SaveEps(const int &FontSz=30, const TStr &Comment=TStr())
Definition: gnuplot.h:123
TGpScaleTy ScaleTy
Definition: gnuplot.h:52
int AddPwrFit2(const int &PlotId, const TGpSeriesTy &SeriesTy=gpwLines, const double &MinX=-1.0, const TStr &Style=TStr())
Definition: gnuplot.cpp:419
#define EAssert(Cond)
Definition: bd.h:280
int Len() const
Definition: shash.h:1121
TStr LblX
Definition: gnuplot.h:51
int IsSameXCol(const int &CurId, const int &PrevId) const
Definition: gnuplot.cpp:758
Definition: gnuplot.h:13
void SetScale(const TGpScaleTy &GpScaleTy)
Definition: gnuplot.h:78
double GetMean() const
Definition: xmath.h:240
Definition: dt.h:412
bool Empty() const
Definition: dt.h:488
static TStr DefDataFNm
Definition: gnuplot.h:23
static TStr Fmt(const char *FmtStr,...)
Definition: dt.cpp:1599
Definition: hash.h:97
static TStr GnuPlotPath
Path to GnuPlot executable. Set if gnuplot is not found in the PATH.
Definition: gnuplot.h:19
void GetKeyDatPrV(TVec< TPair< TKey, TDat > > &KeyDatPrV) const
Definition: hash.h:500
static void PlotValRank(const THash< TKey, TVal, THashFunc > &ValCntH, const TStr &OutFNmPref, const TStr &Desc="", const TStr &XLabel="", const TStr &YLabel="", const TGpScaleTy &ScaleTy=gpsAuto, const bool &PowerFit=false, const TGpSeriesTy &SeriesTy=gpwLinesPoints)
Definition: gnuplot.h:420
TFltPr YRange
Definition: gnuplot.h:53
int AddPlot(const TIntV &YValV, const TGpSeriesTy &SeriesTy=gpwLinesPoints, const TStr &Label=TStr(), const TStr &Style=TStr())
Definition: gnuplot.cpp:186
static void PlotValCntH(const THash< TKey, TVal, THashFunc > &ValCntH, const TStr &OutFNmPref, const TStr &Desc="", const TStr &XLabel="", const TStr &YLabel="", const TGpScaleTy &ScaleTy=gpsAuto, const bool &PowerFit=false, const TGpSeriesTy &SeriesTy=gpwLinesPoints, const bool &PlotCCDF=false, const bool &ExpBucket=false)
Definition: gnuplot.h:434
static TStr DefPlotFNm
Definition: gnuplot.h:22
static void Test()
Definition: gnuplot.cpp:736
void ShowGrid(const bool &Show)
Definition: gnuplot.h:76
static TStr GetScaleStr(const TGpScaleTy &ScaleTy)
Definition: gnuplot.cpp:683
int AddPwrFit1(const int &PlotId, const TGpSeriesTy &SeriesTy=gpwLines, const TStr &Style=TStr())
Definition: gnuplot.cpp:377
int AddErrBar(const TFltTrV &XYDValV, const TStr &Label=TStr())
Definition: gnuplot.cpp:265
char * CStr()
Definition: dt.h:476
TStr GetSeriesPlotStr(const int &PlotN)
Definition: gnuplot.cpp:124
void RunGnuPlot() const
Definition: gnuplot.cpp:873
TSizeTy Add()
Adds a new element at the end of the vector, after its current last element.
Definition: ds.h:602
static TStr GnuPlotFNm
GnuPlot executable file name. Set if different than the standard wgnuplot/gnuplot.
Definition: gnuplot.h:21
TStr PlotFNm
Definition: gnuplot.h:50
TGpScaleTy
Definition: gnuplot.h:6
int Len() const
Definition: hash.h:228
static int Tics42
Definition: gnuplot.h:48
void CreatePlotFile(const TStr &Comment=TStr())
Definition: gnuplot.cpp:768
TGpSeriesTy
Definition: gnuplot.h:11
int AddFunc(const TStr &FuncStr, const TGpSeriesTy &SeriesTy=gpwLinesPoints, const TStr &Label=TStr(), const TStr &Style=TStr())
Definition: gnuplot.cpp:155
void SetXLabel(const TStr &XLabel)
Definition: gnuplot.h:71
static void PlotValV(const TVec< TVal1 > &ValV, const TStr &OutFNmPref, const TStr &Desc="", const TStr &XLabel="", const TStr &YLabel="", const TGpScaleTy &ScaleTy=gpsAuto, const bool &PowerFit=false, const TGpSeriesTy &SeriesTy=gpwLinesPoints)
Definition: gnuplot.h:398
TStrV MoreCmds
Definition: gnuplot.h:56
double GetMn() const
Definition: xmath.h:237
void Def()
Definition: xmath.cpp:339
const TKey & GetKey(const int &KeyId) const
Definition: hash.h:252
void Swap(TRec &Rec1, TRec &Rec2)
Definition: bd.h:568