SNAP Library 2.0, User Reference
2013-05-13 16:33:57
SNAP, a general purpose, high performance system for analysis and manipulation of large networks
|
#include <gnuplot.h>
Classes | |
class | TGpSeries |
class | TGpSeriesCmp |
Public Member Functions | |
TStr | GetSeriesPlotStr (const int &PlotN) |
int | IsSameXCol (const int &CurId, const int &PrevId) const |
void | CreatePlotFile (const TStr &Comment=TStr()) |
void | RunGnuPlot () const |
TGnuPlot (const TStr &FileNm="gplot", const TStr &PlotTitle=TStr(), const bool &Grid=true) | |
TGnuPlot (const TStr &DataFileNm, const TStr &PlotFileNm, const TStr &PlotTitle, const bool &Grid) | |
TGnuPlot (const TGnuPlot &GnuPlot) | |
TGnuPlot & | operator= (const TGnuPlot &GnuPlot) |
void | SetTitle (const TStr &PlotTitle) |
void | SetXLabel (const TStr &XLabel) |
void | SetYLabel (const TStr &YLabel) |
void | SetXYLabel (const TStr &XLabel, const TStr &YLabel) |
void | SetDataPlotFNm (const TStr &DatFNm, const TStr &PltFNm) |
void | ShowGrid (const bool &Show) |
void | Pause (const bool &DoPause) |
void | SetScale (const TGpScaleTy &GpScaleTy) |
void | SetXRange (const double &Min, const double &Max) |
void | SetYRange (const double &Min, const double &Max) |
void | AddCmd (const TStr &Cmd) |
TStr | GetLineStyle (const int &PlotId) const |
void | SetLineStyle (const int &PlotId, const TStr &StyleStr) |
int | AddFunc (const TStr &FuncStr, const TGpSeriesTy &SeriesTy=gpwLinesPoints, const TStr &Label=TStr(), const TStr &Style=TStr()) |
int | AddPlot (const TIntV &YValV, const TGpSeriesTy &SeriesTy=gpwLinesPoints, const TStr &Label=TStr(), const TStr &Style=TStr()) |
int | AddPlot (const TFltV &YValV, const TGpSeriesTy &SeriesTy=gpwLinesPoints, const TStr &Label=TStr(), const TStr &Style=TStr()) |
int | AddPlot (const TFltV &XValV, const TFltV &YValV, const TGpSeriesTy &SeriesTy=gpwLinesPoints, const TStr &Label=TStr(), const TStr &Style=TStr()) |
int | AddPlot (const TIntPrV &XYValV, const TGpSeriesTy &SeriesTy=gpwLinesPoints, const TStr &Label=TStr(), const TStr &Style=TStr()) |
int | AddPlot (const TFltPrV &XYValV, const TGpSeriesTy &SeriesTy=gpwLinesPoints, const TStr &Label=TStr(), const TStr &Style=TStr()) |
int | AddPlot (const TIntKdV &XYValV, const TGpSeriesTy &SeriesTy=gpwLinesPoints, const TStr &Label=TStr(), const TStr &Style=TStr()) |
int | AddPlot (const TFltKdV &XYValV, const TGpSeriesTy &SeriesTy=gpwLinesPoints, const TStr &Label=TStr(), const TStr &Style=TStr()) |
int | AddPlot (const TIntFltKdV &XYValV, const TGpSeriesTy &SeriesTy=gpwLinesPoints, const TStr &Label=TStr(), const TStr &Style=TStr()) |
int | AddPlot (const TIntFltPrV &XYValV, const TGpSeriesTy &SeriesTy=gpwLinesPoints, const TStr &Label=TStr(), const TStr &Style=TStr()) |
int | AddPlot (const TStr &DataFNm, const int &ColY, const TGpSeriesTy &SeriesTy=gpwLinesPoints, const TStr &Label=TStr(), const TStr &Style=TStr()) |
int | AddPlot (const TStr &DataFNm, const int &ColX, const int &ColY, const TGpSeriesTy &SeriesTy=gpwLinesPoints, const TStr &Label=TStr(), const TStr &Style=TStr()) |
template<class TKey , class TDat , class THashFunc > | |
int | AddPlot (const THash< TKey, TDat, THashFunc > &XYValH, const TGpSeriesTy &SeriesTy=gpwLinesPoints, const TStr &Label=TStr(), const TStr &Style=TStr(), const bool &ExpBucket=false) |
template<class TKey , class THashFunc > | |
int | AddPlot (const THash< TKey, TMom, THashFunc > &ValMomH, const TGpSeriesTy &SeriesTy=gpwLinesPoints, const TStr &Label=TStr(), const TStr &Style=TStr(), bool PlotAvg=true, bool PlotMed=true, bool PlotMin=false, bool PlotMax=false, bool PlotSDev=false, bool PlotStdErr=false, const bool &ExpBucket=false) |
int | AddErrBar (const TFltTrV &XYDValV, const TStr &Label=TStr()) |
int | AddErrBar (const TFltTrV &XYDValV, const TStr &DatLabel, const TStr &ErrLabel) |
int | AddErrBar (const TFltV &YValV, const TFltV &DeltaYV, const TStr &Label=TStr()) |
int | AddErrBar (const TFltV &XValV, const TFltV &YValV, const TFltV &DeltaYV, const TStr &Label=TStr()) |
int | AddErrBar (const TFltPrV &XYValV, const TFltV &DeltaYV, const TStr &Label=TStr()) |
int | AddErrBar (const TFltKdV &XYValV, const TFltV &DeltaYV, const TStr &Label=TStr()) |
int | AddErrBar (const TFltPrV &XYValV, const TFltV &DeltaYV, const TStr &DatLabel, const TStr &ErrLabel) |
int | AddLinFit (const int &PlotId, const TGpSeriesTy &SeriesTy=gpwLines, const TStr &Style=TStr()) |
int | AddPwrFit (const int &PlotId, const TGpSeriesTy &SeriesTy=gpwLines, const TStr &Style=TStr()) |
int | AddPwrFit1 (const int &PlotId, const TGpSeriesTy &SeriesTy=gpwLines, const TStr &Style=TStr()) |
int | AddPwrFit2 (const int &PlotId, const TGpSeriesTy &SeriesTy=gpwLines, const double &MinX=-1.0, const TStr &Style=TStr()) |
int | AddPwrFit3 (const int &PlotId, const TGpSeriesTy &SeriesTy=gpwLines, const double &MinX=-1.0, const TStr &Style=TStr()) |
int | AddPwrFit3 (const int &PlotId, const TGpSeriesTy &SeriesTy, const double &MinX, const TStr &Style, double &Intercept, double &Slope, double &R2) |
int | AddLogFit (const int &PlotId, const TGpSeriesTy &SeriesTy=gpwLines, const TStr &Style=TStr()) |
int | AddExpFit (const int &PlotId, const TGpSeriesTy &SeriesTy=gpwLines, const double &FitXOffset=0.0, const TStr &Style=TStr()) |
void | SavePng (const int &SizeX=1000, const int &SizeY=800, const TStr &Comment=TStr()) |
void | SavePng (const TStr &FNm, const int &SizeX=1000, const int &SizeY=800, const TStr &Comment=TStr(), const TStr &Terminal=TStr()) |
void | SaveEps (const int &FontSz=30, const TStr &Comment=TStr()) |
void | SaveEps (const TStr &FNm, const int &FontSz=30, const TStr &Comment=TStr()) |
void | Plot (const TStr &Comment=TStr()) |
Static Public Member Functions | |
static void | MakeExpBins (const TFltPrV &XYValV, TFltPrV &ExpXYValV, const double &BinFactor=2, const double &MinYVal=1) |
static void | MakeExpBins (const TFltKdV &XYValV, TFltKdV &ExpXYValV, const double &BinFactor=2, const double &MinYVal=1) |
static void | LoadTs (const TStr &FNm, TStrV &ColNmV, TVec< TFltKdV > &ColV) |
static TStr | GetScaleStr (const TGpScaleTy &ScaleTy) |
static TStr | GetSeriesTyStr (const TGpSeriesTy &SeriesTy) |
static void | SaveTs (const TIntKdV &KdV, const TStr &FNm, const TStr &HeadLn=TStr()) |
static void | SaveTs (const TIntFltKdV &KdV, const TStr &FNm, const TStr &HeadLn=TStr()) |
template<class TVal1 , class TVal2 > | |
static void | SaveTs (const TVec< TPair< TVal1, TVal2 > > &ValV, const TStr &FNm, const TStr &HeadLn=TStr()) |
template<class TVal1 , class TVal2 , class TVal3 > | |
static void | SaveTs (const TVec< TTriple< TVal1, TVal2, TVal3 > > &ValV, const TStr &FNm, const TStr &HeadLn=TStr()) |
template<class TVal , int Vals> | |
static void | SaveTs (const TVec< TTuple< TVal, Vals > > &ValV, const TStr &FNm, const TStr &HeadLn=TStr()) |
static void | Test () |
template<class TVal1 , class TVal2 > | |
static void | PlotValV (const TVec< TPair< TVal1, TVal2 > > &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) |
template<class TVal1 , class TVal2 > | |
static void | PlotValV (const TVec< TPair< TVal1, TVal2 > > &ValV1, const TStr &Name1, const TVec< TPair< TVal1, TVal2 > > &ValV2, const TStr &Name2, const TStr &OutFNmPref, const TStr &Desc="", const TStr &XLabel="", const TStr &YLabel="", const TGpScaleTy &ScaleTy=gpsAuto, const bool &PowerFit=false, const TGpSeriesTy &SeriesTy=gpwLinesPoints) |
template<class TVal1 > | |
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) |
template<class TKey , class TVal , class THashFunc > | |
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 &PlotNCDF=false, const bool &ExpBucket=false) |
template<class TKey , class TVal , class THashFunc > | |
static void | PlotValCntH (const THash< TKey, TVal, THashFunc > &ValCntH1, const TStr &Label1, const THash< TKey, TVal, THashFunc > &ValCntH2, const TStr &Label2, const TStr &OutFNmPref, const TStr &Desc, const TStr &XLabel, const TStr &YLabel, const TGpScaleTy &ScaleTy=gpsAuto, const TGpSeriesTy &SeriesTy=gpwLinesPoints) |
template<class TKey , class TVal , class THashFunc > | |
static void | PlotValCntH (const THash< TKey, TVal, THashFunc > &ValCntH1, const TStr &Label1, const THash< TKey, TVal, THashFunc > &ValCntH2, const TStr &Label2, const THash< TKey, TVal, THashFunc > &ValCntH3, const TStr &Label3, const TStr &OutFNmPref, const TStr &Desc, const TStr &XLabel, const TStr &YLabel, const TGpScaleTy &ScaleTy=gpsAuto, const TGpSeriesTy &SeriesTy=gpwLinesPoints) |
template<class TVal1 > | |
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) |
Static Public Attributes | |
static TStr | DefPlotFNm = "GnuPlot.plt" |
static TStr | DefDataFNm = "GnuPlot.tab" |
Static Private Member Functions | |
static int | GetTics42 () |
Private Attributes | |
TStr | DataFNm |
TStr | PlotFNm |
TStr | Title |
TStr | LblX |
TStr | LblY |
TGpScaleTy | ScaleTy |
TFltPr | YRange |
TFltPr | XRange |
bool | SetGrid |
bool | SetPause |
TVec< TGpSeries > | SeriesV |
TStrV | MoreCmds |
Static Private Attributes | |
static int | Tics42 = TGnuPlot::GetTics42() |
TGnuPlot::TGnuPlot | ( | const TStr & | FileNm = "gplot" , |
const TStr & | PlotTitle = TStr() , |
||
const bool & | Grid = true |
||
) |
TGnuPlot::TGnuPlot | ( | const TStr & | DataFileNm, |
const TStr & | PlotFileNm, | ||
const TStr & | PlotTitle, | ||
const bool & | Grid | ||
) |
TGnuPlot::TGnuPlot | ( | const TGnuPlot & | GnuPlot | ) |
Definition at line 98 of file gnuplot.cpp.
: DataFNm(GnuPlot.DataFNm), PlotFNm(GnuPlot.PlotFNm), Title(GnuPlot.Title), LblX(GnuPlot.LblX), LblY(GnuPlot.LblY), ScaleTy(GnuPlot.ScaleTy), YRange(GnuPlot.YRange), XRange(GnuPlot.XRange), SetGrid(GnuPlot.SetGrid), SetPause(GnuPlot.SetPause), SeriesV(GnuPlot.SeriesV), MoreCmds(GnuPlot.MoreCmds) { }
void TGnuPlot::AddCmd | ( | const TStr & | Cmd | ) | [inline] |
int TGnuPlot::AddErrBar | ( | const TFltTrV & | XYDValV, |
const TStr & | Label = TStr() |
||
) |
int TGnuPlot::AddErrBar | ( | const TFltTrV & | XYDValV, |
const TStr & | DatLabel, | ||
const TStr & | ErrLabel | ||
) |
Definition at line 269 of file gnuplot.cpp.
{ TFltKdV XYFltValV(XYDValV.Len(), 0); TFltV DeltaV(XYDValV.Len(), 0); for (int i = 0; i < XYDValV.Len(); i++) { XYFltValV.Add(TFltKd(XYDValV[i].Val1, XYDValV[i].Val2)); DeltaV.Add(XYDValV[i].Val3); } const int PlotId = AddPlot(XYFltValV, gpwLinesPoints, DatLabel); AddErrBar(XYFltValV, DeltaV, ErrLabel); return PlotId; }
int TGnuPlot::AddErrBar | ( | const TFltV & | YValV, |
const TFltV & | DeltaYV, | ||
const TStr & | Label = TStr() |
||
) |
int TGnuPlot::AddErrBar | ( | const TFltPrV & | XYValV, |
const TFltV & | DeltaYV, | ||
const TStr & | Label = TStr() |
||
) |
int TGnuPlot::AddErrBar | ( | const TFltKdV & | XYValV, |
const TFltV & | DeltaYV, | ||
const TStr & | Label = TStr() |
||
) |
Definition at line 318 of file gnuplot.cpp.
{ if (XYValV.Empty()) { printf("***AddErrBar: empty plot (%s) %s\n", DataFNm.CStr(), Title.CStr()); return -1; } IAssert(XYValV.Len() == DeltaYV.Len()); TGpSeries Plot; Plot.SeriesTy = gpwErrBars; Plot.Label = Label; Plot.XYValV = XYValV; Plot.ZValV = DeltaYV; SeriesV.Add(Plot); return SeriesV.Len() - 1; }
int TGnuPlot::AddErrBar | ( | const TFltPrV & | XYValV, |
const TFltV & | DeltaYV, | ||
const TStr & | DatLabel, | ||
const TStr & | ErrLabel | ||
) |
Definition at line 308 of file gnuplot.cpp.
int TGnuPlot::AddExpFit | ( | const int & | PlotId, |
const TGpSeriesTy & | SeriesTy = gpwLines , |
||
const double & | FitXOffset = 0.0 , |
||
const TStr & | Style = TStr() |
||
) |
!! skip zero values
Definition at line 544 of file gnuplot.cpp.
{ const TGpSeries& Plot = SeriesV[PlotId]; if(Plot.XYValV.Empty()) return -1; const TFltKdV& XY = Plot.XYValV; double A, B, R2, SigA, SigB, Chi2; // power fit TFltPrV XYPr; int s; for (s = 0; s < XY.Len(); s++) { if (XY[s].Key-FitXOffset > 0) { XYPr.Add(TFltPr(XY[s].Key-FitXOffset, XY[s].Dat)); } } TSpecFunc::ExpFit(XYPr, A, B, SigA, SigB, Chi2, R2); TStr Label, StyleStr=Style; if (FitXOffset == 0) { Label = TStr::Fmt("%.4g exp(%.4g x) R^2:%.2g", A, B, R2); } else { Label = TStr::Fmt("%.4g exp(%.4g x - %g) R^2:%.2g", A, B, FitXOffset, R2); } if (StyleStr.Empty()) { StyleStr = "linewidth 3"; } const int FitId = AddFunc(TStr::Fmt("%f*exp(%f*x-%f)", A, B, FitXOffset), SeriesTy, Label, StyleStr); return FitId; /*SeriesV.Add(); TGpSeries& NewPlot = SeriesV.Last(); TFltKdV& EstXY = NewPlot.XYValV; for (s = 0; s < XYPr.Len(); s++) { EstXY.Add(TFltKd(XYPr[s].Val1+FitXOffset, A*exp(B*XYPr[s].Val1))); } NewPlot.SeriesTy = SeriesTy; if (Style.Empty()) { NewPlot.WithStyle = "linewidth 3"; } else { NewPlot.WithStyle = Style; } return SeriesV.Len() - 1;*/ }
int TGnuPlot::AddFunc | ( | const TStr & | FuncStr, |
const TGpSeriesTy & | SeriesTy = gpwLinesPoints , |
||
const TStr & | Label = TStr() , |
||
const TStr & | Style = TStr() |
||
) |
Definition at line 149 of file gnuplot.cpp.
{ const int Id = SeriesV.Len(); TGpSeries Plot; Plot.SeriesTy = SeriesTy; Plot.Label = Label; if (! FuncStr.Empty()) { Plot.DataFNm = TStr::Fmt("f%d(x)=%s, f%d(x)", Id, FuncStr.CStr(), Id); } else { Plot.DataFNm = TStr::Fmt("f%d(x)", Id); } Plot.XCol = -1; Plot.WithStyle = Style; SeriesV.Add(Plot); return Id; }
int TGnuPlot::AddLinFit | ( | const int & | PlotId, |
const TGpSeriesTy & | SeriesTy = gpwLines , |
||
const TStr & | Style = TStr() |
||
) |
Definition at line 333 of file gnuplot.cpp.
{ if (PlotId < 0 || PlotId >= SeriesV.Len()) return -1; const TGpSeries& Plot = SeriesV[PlotId]; if(Plot.XYValV.Empty()) return -1; const TFltKdV& XY = Plot.XYValV; double A, B, R2, SigA, SigB, Chi2; // linear fit TFltPrV XYPr; int s; for (s = 0; s < XY.Len(); s++) { XYPr.Add(TFltPr(XY[s].Key, XY[s].Dat)); } TSpecFunc::LinearFit(XYPr, A, B, SigA, SigB, Chi2, R2); TStr StyleStr=Style; if (StyleStr.Empty()) { StyleStr = "linewidth 3"; } const int FitId = AddFunc(TStr::Fmt("%f+%f*x", A, B), SeriesTy, TStr::Fmt("%.4g + %.4g x R^2:%.2g", A, B, R2), StyleStr); return FitId; /*SeriesV.Add(); TGpSeries& NewPlot = SeriesV.Last(); TFltKdV& EstXY = NewPlot.XYValV; for (s = 0; s < XY.Len(); s++) { EstXY.Add(TFltKd(XY[s].Key, A + B*XYPr[s].Val1)); } NewPlot.Label = TStr::Fmt("%.4g + %.4g x R^2:%.2g", A, B, R2); NewPlot.SeriesTy = SeriesTy; if (Style.Empty()) { NewPlot.WithStyle = "linewidth 3"; } else { NewPlot.WithStyle = Style; } return SeriesV.Len() - 1;*/ }
int TGnuPlot::AddLogFit | ( | const int & | PlotId, |
const TGpSeriesTy & | SeriesTy = gpwLines , |
||
const TStr & | Style = TStr() |
||
) |
!! skip zero values
Definition at line 513 of file gnuplot.cpp.
{ const TGpSeries& Plot = SeriesV[PlotId]; if(Plot.XYValV.Empty()) return -1; const TFltKdV& XY = Plot.XYValV; double A, B, R2, SigA, SigB, Chi2; // power fit TFltPrV XYPr; int s; for (s = 0; s < XY.Len(); s++) { if (XY[s].Key > 0) { XYPr.Add(TFltPr(XY[s].Key, XY[s].Dat)); } } TSpecFunc::LogFit(XYPr, A, B, SigA, SigB, Chi2, R2); TStr StyleStr=Style; if (StyleStr.Empty()) { StyleStr = "linewidth 3"; } const int FitId = AddFunc(TStr::Fmt("%f+%f*log(x)", A, B), SeriesTy, TStr::Fmt("%.4g + %.4g log(x) R^2:%.2g", A, B, R2), StyleStr); return FitId; /*SeriesV.Add(); TGpSeries& NewPlot = SeriesV.Last(); TFltKdV& EstXY = NewPlot.XYValV; for (s = 0; s < XYPr.Len(); s++) { EstXY.Add(TFltKd(XYPr[s].Val1, A+B*log((double)XYPr[s].Val1))); } NewPlot.Label = TStr::Fmt("%.4g + %.4g log(x) R^2:%.2g", A, B, R2); NewPlot.SeriesTy = SeriesTy; if (Style.Empty()) { NewPlot.WithStyle = "linewidth 3"; } else { NewPlot.WithStyle = Style; } return SeriesV.Len() - 1;*/ }
int TGnuPlot::AddPlot | ( | const TIntV & | YValV, |
const TGpSeriesTy & | SeriesTy = gpwLinesPoints , |
||
const TStr & | Label = TStr() , |
||
const TStr & | Style = TStr() |
||
) |
int TGnuPlot::AddPlot | ( | const TFltV & | YValV, |
const TGpSeriesTy & | SeriesTy = gpwLinesPoints , |
||
const TStr & | Label = TStr() , |
||
const TStr & | Style = TStr() |
||
) |
int TGnuPlot::AddPlot | ( | const TFltV & | XValV, |
const TFltV & | YValV, | ||
const TGpSeriesTy & | SeriesTy = gpwLinesPoints , |
||
const TStr & | Label = TStr() , |
||
const TStr & | Style = TStr() |
||
) |
int TGnuPlot::AddPlot | ( | const TIntPrV & | XYValV, |
const TGpSeriesTy & | SeriesTy = gpwLinesPoints , |
||
const TStr & | Label = TStr() , |
||
const TStr & | Style = TStr() |
||
) |
int TGnuPlot::AddPlot | ( | const TFltPrV & | XYValV, |
const TGpSeriesTy & | SeriesTy = gpwLinesPoints , |
||
const TStr & | Label = TStr() , |
||
const TStr & | Style = TStr() |
||
) |
int TGnuPlot::AddPlot | ( | const TIntKdV & | XYValV, |
const TGpSeriesTy & | SeriesTy = gpwLinesPoints , |
||
const TStr & | Label = TStr() , |
||
const TStr & | Style = TStr() |
||
) |
int TGnuPlot::AddPlot | ( | const TFltKdV & | XYValV, |
const TGpSeriesTy & | SeriesTy = gpwLinesPoints , |
||
const TStr & | Label = TStr() , |
||
const TStr & | Style = TStr() |
||
) |
Definition at line 245 of file gnuplot.cpp.
int TGnuPlot::AddPlot | ( | const TIntFltKdV & | XYValV, |
const TGpSeriesTy & | SeriesTy = gpwLinesPoints , |
||
const TStr & | Label = TStr() , |
||
const TStr & | Style = TStr() |
||
) |
int TGnuPlot::AddPlot | ( | const TIntFltPrV & | XYValV, |
const TGpSeriesTy & | SeriesTy = gpwLinesPoints , |
||
const TStr & | Label = TStr() , |
||
const TStr & | Style = TStr() |
||
) |
int TGnuPlot::AddPlot | ( | const TStr & | DataFNm, |
const int & | ColY, | ||
const TGpSeriesTy & | SeriesTy = gpwLinesPoints , |
||
const TStr & | Label = TStr() , |
||
const TStr & | Style = TStr() |
||
) |
Definition at line 162 of file gnuplot.cpp.
{ return AddPlot(DataFNm, 0, ColY, SeriesTy, Label, Style); }
int TGnuPlot::AddPlot | ( | const TStr & | DataFNm, |
const int & | ColX, | ||
const int & | ColY, | ||
const TGpSeriesTy & | SeriesTy = gpwLinesPoints , |
||
const TStr & | Label = TStr() , |
||
const TStr & | Style = TStr() |
||
) |
Definition at line 167 of file gnuplot.cpp.
int TGnuPlot::AddPlot | ( | const THash< TKey, TDat, THashFunc > & | XYValH, |
const TGpSeriesTy & | SeriesTy = gpwLinesPoints , |
||
const TStr & | Label = TStr() , |
||
const TStr & | Style = TStr() , |
||
const bool & | ExpBucket = false |
||
) |
Definition at line 235 of file gnuplot.h.
{ TFltPrV XYFltValV(XYValH.Len(), 0); for (int k = XYValH.FFirstKeyId(); XYValH.FNextKeyId(k); ) { XYFltValV.Add(TFltPr(TFlt(XYValH.GetKey(k)), TFlt(XYValH[k]))); } XYFltValV.Sort(); if (ExpBucket) { TFltPrV BucketV; TGnuPlot::MakeExpBins(XYFltValV, BucketV); BucketV.Swap(XYFltValV); } return AddPlot(XYFltValV, SeriesTy, Label, Style); }
int TGnuPlot::AddPlot | ( | const THash< TKey, TMom, THashFunc > & | ValMomH, |
const TGpSeriesTy & | SeriesTy = gpwLinesPoints , |
||
const TStr & | Label = TStr() , |
||
const TStr & | Style = TStr() , |
||
bool | PlotAvg = true , |
||
bool | PlotMed = true , |
||
bool | PlotMin = false , |
||
bool | PlotMax = false , |
||
bool | PlotSDev = false , |
||
bool | PlotStdErr = false , |
||
const bool & | ExpBucket = false |
||
) |
Definition at line 250 of file gnuplot.h.
{ TFltTrV AvgV, StdErrV; TFltPrV AvgV2, MedV, MinV, MaxV, BucketV; for (int i = ValMomH.FFirstKeyId(); ValMomH.FNextKeyId(i); ) { TMom Mom(ValMomH[i]); if (! Mom.IsDef()) { Mom.Def(); } const double x = ValMomH.GetKey(i); if (PlotAvg) { if (PlotSDev) { AvgV.Add(TFltTr(x, Mom.GetMean(), Mom.GetSDev())); } // std deviation else { AvgV2.Add(TFltPr(x, Mom.GetMean())); } if (PlotStdErr) { StdErrV.Add(TFltTr(x, Mom.GetMean(), Mom.GetSDev()/sqrt((double)Mom.GetVals()))); } } if (PlotMed) { MedV.Add(TFltPr(x, Mom.GetMedian())); } if (PlotMin) { MinV.Add(TFltPr(x, Mom.GetMn())); } if (PlotMax) { MaxV.Add(TFltPr(x, Mom.GetMx())); } } AvgV.Sort(); AvgV2.Sort(); MedV.Sort(); MinV.Sort(); MaxV.Sort(); int PlotId=0; // exponential bucketing if (! AvgV2.Empty()) { TGnuPlot::MakeExpBins(AvgV2, BucketV); BucketV.Swap(AvgV2); } if (! MedV.Empty()) { TGnuPlot::MakeExpBins(MedV, BucketV); BucketV.Swap(MedV); } if (! MinV.Empty()) { TGnuPlot::MakeExpBins(MinV, BucketV); BucketV.Swap(MinV); } if (! MaxV.Empty()) { TGnuPlot::MakeExpBins(MaxV, BucketV); BucketV.Swap(MaxV); } // plot if (! AvgV.Empty()) { PlotId = AddErrBar(AvgV, Label+" Average", "StdDev"); } if (! AvgV2.Empty()) { PlotId = AddPlot(AvgV2, SeriesTy, Label+" Average", Style); } if (! MedV.Empty()) { PlotId = AddPlot(MedV, SeriesTy, Label+" Median", Style); } if (! MinV.Empty()) { PlotId = AddPlot(MinV, SeriesTy, Label+" Min", Style); } if (! MaxV.Empty()) { PlotId = AddPlot(MaxV, SeriesTy, Label+" Max", Style); } if (! StdErrV.Empty()) { PlotId = AddErrBar(StdErrV, Label+" Standard error", Style); } return PlotId; }
int TGnuPlot::AddPwrFit | ( | const int & | PlotId, |
const TGpSeriesTy & | SeriesTy = gpwLines , |
||
const TStr & | Style = TStr() |
||
) |
Definition at line 364 of file gnuplot.cpp.
{ const int PlotId1 = AddPwrFit3(PlotId, SeriesTy); AddPwrFit2(PlotId, SeriesTy, 5.0); return PlotId1; }
int TGnuPlot::AddPwrFit1 | ( | const int & | PlotId, |
const TGpSeriesTy & | SeriesTy = gpwLines , |
||
const TStr & | Style = TStr() |
||
) |
!! skip zero values
Definition at line 371 of file gnuplot.cpp.
{ if (PlotId < 0 || PlotId >= SeriesV.Len()) return -1; const TGpSeries& Plot = SeriesV[PlotId]; if(Plot.XYValV.Empty()) return -1; const TFltKdV& XY = Plot.XYValV; double A, B, R2, SigA, SigB, Chi2, MinY = TFlt::Mx, MinX = TFlt::Mx; // power fit TFltPrV XYPr; int s; for (s = 0; s < XY.Len(); s++) { if (XY[s].Key > 0) { XYPr.Add(TFltPr(XY[s].Key, XY[s].Dat)); MinX = TMath::Mn(MinX, XY[s].Key()); MinY = TMath::Mn(MinY, XY[s].Dat()); } } MinY = TMath::Mn(1.0, MinY); TSpecFunc::PowerFit(XYPr, A, B, SigA, SigB, Chi2, R2); TStr StyleStr=Style; if (StyleStr.Empty()) { StyleStr = "linewidth 3"; } const int FitId = AddFunc(TStr::Fmt("%f*x**%f", A, B), SeriesTy, TStr::Fmt("%.1g * x^{%.4g} R^2:%.2g", A, B, R2), StyleStr); return FitId; /*SeriesV.Add(); TGpSeries& NewPlot = SeriesV.Last(); const int FitId = SeriesV.Len() - 1; NewPlot.DataFNm = ; TFltKdV& EstXY = NewPlot.XYValV; for (s = 0; s < XYPr.Len(); s++) { const double YVal = A*pow(XYPr[s].Val1(), B); if (YVal < MinY) continue; EstXY.Add(TFltKd(XYPr[s].Val1, YVal)); } NewPlot.Label = ; NewPlot.SeriesTy = SeriesTy; if (Style.Empty()) { NewPlot.WithStyle = "linewidth 3"; } else { NewPlot.WithStyle = Style; } //if (MinX < 5.0) MinX = 5.0; //AddPwrFit2(PlotId, SeriesTy, MinX);*/ }
int TGnuPlot::AddPwrFit2 | ( | const int & | PlotId, |
const TGpSeriesTy & | SeriesTy = gpwLines , |
||
const double & | MinX = -1.0 , |
||
const TStr & | Style = TStr() |
||
) |
Definition at line 413 of file gnuplot.cpp.
{ const TGpSeries& Plot = SeriesV[PlotId]; if(Plot.XYValV.Empty()) return -1; const TFltKdV& XY = Plot.XYValV; // power fit TFltPrV XYPr; double MinY = TFlt::Mx; for (int s = 0; s < XY.Len(); s++) { if (XY[s].Key > 0.0) { XYPr.Add(TFltPr(XY[s].Key, XY[s].Dat)); MinY = TMath::Mn(MinY, XY[s].Dat()); } } if (XYPr.Empty()) return -1; MinY = TMath::Mn(1.0, MinY); // determine the sign of power coefficient double CoefSign = 0.0; { double A, B, R2, SigA, SigB, Chi2; TSpecFunc::PowerFit(XYPr, A, B, SigA, SigB, Chi2, R2); CoefSign = B > 0.0 ? +1.0 : -1.0; } const double PowerCf = CoefSign * TSpecFunc::GetPowerCoef(XYPr, MinX); int Mid = (int) exp(log((double)XYPr.Len())/2.0); if (Mid >= XYPr.Len()) { Mid = XYPr.Len()-1; } const double MidX = XYPr[Mid].Val1(); const double MidY = XYPr[Mid].Val2(); const double B = MidY / pow(MidX, PowerCf); TStr StyleStr=Style; if (StyleStr.Empty()) { StyleStr = "linewidth 3"; } const int FitId = AddFunc(TStr::Fmt("%f*x**%f", B, PowerCf), SeriesTy, TStr::Fmt("MLE = x^{%.4g}", PowerCf), StyleStr); return FitId; /*SeriesV.Add(); TGpSeries& NewPlot = SeriesV.Last(); TFltKdV& XYFit = NewPlot.XYValV; XYFit.Gen(XYPr.Len(), 0); for (int s = 0; s < XYPr.Len(); s++) { const double XVal = XYPr[s].Val1; const double YVal = B * pow(XYPr[s].Val1(), PowerCf); if (YVal < MinY || XVal < MinX) continue; XYFit.Add(TFltKd(XVal, YVal)); } NewPlot.Label = TStr::Fmt("PowerFit: %g", PowerCf); NewPlot.SeriesTy = SeriesTy; if (Style.Empty()) { NewPlot.WithStyle = "linewidth 3"; } else { NewPlot.WithStyle = Style; } return SeriesV.Len() - 1;*/ }
int TGnuPlot::AddPwrFit3 | ( | const int & | PlotId, |
const TGpSeriesTy & | SeriesTy = gpwLines , |
||
const double & | MinX = -1.0 , |
||
const TStr & | Style = TStr() |
||
) |
Definition at line 461 of file gnuplot.cpp.
{ double Intercept, Slope, R2; return AddPwrFit3(PlotId, SeriesTy, MinX, Style, Intercept, Slope, R2); }
int TGnuPlot::AddPwrFit3 | ( | const int & | PlotId, |
const TGpSeriesTy & | SeriesTy, | ||
const double & | MinX, | ||
const TStr & | Style, | ||
double & | Intercept, | ||
double & | Slope, | ||
double & | R2 | ||
) |
!! skip zero values
Definition at line 467 of file gnuplot.cpp.
{ if (PlotId < 0 || PlotId >= SeriesV.Len()) return -1; const TGpSeries& Plot = SeriesV[PlotId]; if(Plot.XYValV.Empty()) return -1; double A, B, SigA, SigB, Chi2, MinY=TFlt::Mx; const TFltKdV& XY = Plot.XYValV; //SeriesV.Add(); //TGpSeries& NewPlot = SeriesV.Last(); //TFltKdV& EstXY = NewPlot.XYValV; TFltPrV FitXY, NewFitXY; for (int s = 0; s < XY.Len(); s++) { if (XY[s].Key > 0 && XY[s].Key >= MinX) { FitXY.Add(TFltPr(XY[s].Key, XY[s].Dat)); MinY = TMath::Mn(MinY, XY[s].Dat()); } } MinY = TMath::Mn(1.0, MinY); // power fit (if tail is too fat, cut everything where // extrapolation sets the value < MinY while (true) { TSpecFunc::PowerFit(FitXY, A, B, SigA, SigB, Chi2, R2); NewFitXY.Clr(false); //EstXY.Clr(false); for (int s = 0; s < FitXY.Len(); s++) { const double YVal = A*pow(FitXY[s].Val1(), B); if (YVal < MinY) continue; //EstXY.Add(TFltKd(FitXY[s].Val1, YVal)); NewFitXY.Add(TFltPr(FitXY[s].Val1, FitXY[s].Val2)); } if (NewFitXY.Len() < 10 || FitXY.Last().Val1 < 1.2 * NewFitXY.Last().Val1) { break; } else { FitXY.Swap(NewFitXY); } } TStr StyleStr=Style; if (StyleStr.Empty()) { StyleStr = "linewidth 3"; } const int FitId = AddFunc(TStr::Fmt("%f*x**%f", A, B), SeriesTy, TStr::Fmt("%.1g * x^{%.4g} R^2:%.2g", A, B, R2), StyleStr); return FitId; /*NewPlot.Label = TStr::Fmt("%.1g * x^{%.4g} R^2:%.2g", A, B, R2); Intercept = A; Slope = B; NewPlot.SeriesTy = SeriesTy; if (Style.Empty()) { NewPlot.WithStyle = "linewidth 3"; } else { NewPlot.WithStyle = Style; } return SeriesV.Len() - 1;*/ }
void TGnuPlot::CreatePlotFile | ( | const TStr & | Comment = TStr() | ) |
Definition at line 761 of file gnuplot.cpp.
{ time_t ltime; time(<ime); char* TimeStr = ctime(<ime); TimeStr[strlen(TimeStr) - 1] = 0; // rearrange columns so that longest are on the left //SeriesV.Sort(false); TIntV SerIdV(SeriesV.Len(), 0); for (int i = 0; i < SeriesV.Len(); i++) { SerIdV.Add(i); } SerIdV.SortCmp(TGpSeriesCmp(SeriesV)); // set columns int ColCnt = 1; bool SaveData = false; for (int s = 0; s < SeriesV.Len(); s++) { TGpSeries& Plt = SeriesV[SerIdV[s]]; if (Plt.XYValV.Empty()) { continue; } Plt.DataFNm = DataFNm; // plots use same X column const int PrevCol = s > 0 ? IsSameXCol(SerIdV[s], SerIdV[s-1]) : -1; if (PrevCol != -1) { Plt.XCol = PrevCol; } else { Plt.XCol = ColCnt; ColCnt++; } Plt.YCol = ColCnt; ColCnt++; if (! Plt.ZValV.Empty()) { Plt.ZCol = ColCnt; ColCnt++; } if (! Plt.XYValV.Empty()) { SaveData=true; } } // save data file (skip duplicate X columns) if (SaveData) { FILE *F = fopen(DataFNm.CStr(), "wt"); EAssertR(F != NULL, TStr("Can not open data file ")+DataFNm); fprintf(F, "#\n"); fprintf(F, "# %s (%s)\n", Comment.CStr(), TimeStr); fprintf(F, "#\n"); // column names for (int i = 0; i < SerIdV.Len(); i++) { const TGpSeries& Ser = SeriesV[SerIdV[i]]; if (Ser.XYValV.Empty()) { continue; } if (i == 0) { fprintf(F, "# "); } else { fprintf(F, "\t"); } if (Ser.SaveXVals()) { if (! LblX.Empty()) { fprintf(F, "%s\t", LblX.CStr()); } else { fprintf(F, "XVals\t"); } } if (Ser.Label.Empty()) { fprintf(F, "%s", LblY.CStr()); } else { fprintf(F, "%s", SeriesV[SerIdV[i]].Label.CStr()); } if (Ser.ZCol > 0) fprintf(F, "\tDeltaY"); } fprintf(F, "\n"); // data for (int row = 0; row < SeriesV[SerIdV[0]].XYValV.Len(); row++) { for (int i = 0; i < SeriesV.Len(); i++) { const TGpSeries& Ser = SeriesV[SerIdV[i]]; if (row < Ser.XYValV.Len()) { if (i > 0) { fprintf(F, "\t"); } if (Ser.SaveXVals()) { fprintf(F, "%g\t%g", Ser.XYValV[row].Key(), Ser.XYValV[row].Dat()); } else { fprintf(F, "%g", Ser.XYValV[row].Dat()); } if (! Ser.ZValV.Empty()) { fprintf(F, "\t%g", Ser.ZValV[row]()); } } } fprintf(F, "\n"); } fclose(F); } // save plot file FILE *F = fopen(PlotFNm.CStr(), "wt"); EAssertR(F != 0, TStr("Can not open plot file ")+PlotFNm); TStr CurDir = TDir::GetCurDir(); CurDir.ChangeStrAll("\\", "\\\\"); fprintf(F, "#\n"); fprintf(F, "# %s (%s)\n", Comment.CStr(), TimeStr); fprintf(F, "#\n\n"); if (! Title.Empty()) fprintf(F, "set title \"%s\"\n", Title.CStr()); fprintf(F, "set key bottom right\n"); fprintf(F, "%s\n", GetScaleStr(ScaleTy).CStr()); if (ScaleTy==gpsLog || ScaleTy==gpsLog10X || ScaleTy==gpsLog10XY) { fprintf(F, "set format x \"10^{%%L}\"\n"); fprintf(F, "set mxtics 10\n"); } if (ScaleTy==gpsLog || ScaleTy==gpsLog10Y || ScaleTy==gpsLog10XY) { fprintf(F, "set format y \"10^{%%L}\"\n"); fprintf(F, "set mytics 10\n"); } if (ScaleTy==gpsLog2X || ScaleTy==gpsLog2XY) { fprintf(F, "set format x \"2^{%%L}\"\n"); } if (ScaleTy==gpsLog2Y || ScaleTy==gpsLog2XY) { fprintf(F, "set format y \"2^{%%L}\"\n"); } if (SetGrid) fprintf(F, "set grid\n"); if (XRange.Val1 != XRange.Val2) fprintf(F, "set xrange [%g:%g]\n", XRange.Val1(), XRange.Val2()); if (YRange.Val1 != YRange.Val2) fprintf(F, "set yrange [%g:%g]\n", YRange.Val1(), YRange.Val2()); if (! LblX.Empty()) fprintf(F, "set xlabel \"%s\"\n", LblX.CStr()); if (! LblY.Empty()) fprintf(F, "set ylabel \"%s\"\n", LblY.CStr()); if (Tics42) { fprintf(F, "set tics scale 2\n"); // New in version 4.2 } else { fprintf(F, "set ticscale 2 1\n"); // Old (deprecated) } // custom commands for (int i = 0; i < MoreCmds.Len(); i++) { fprintf(F, "%s\n", MoreCmds[i].CStr()); } // plot if (! SeriesV.Empty()) { fprintf(F, "plot \t"); for (int i = 0; i < SeriesV.Len(); i++) { fprintf(F, "%s", GetSeriesPlotStr(i).CStr()); } fprintf(F, "\n"); } if (SetPause) fprintf(F, "pause -1 \"Hit return to exit. %s\"\n", PlotFNm.CStr()); fclose(F); }
TStr TGnuPlot::GetLineStyle | ( | const int & | PlotId | ) | const [inline] |
TStr TGnuPlot::GetScaleStr | ( | const TGpScaleTy & | ScaleTy | ) | [static] |
Definition at line 676 of file gnuplot.cpp.
{ switch(ScaleTy){ case gpsNoAuto: return TStr("set noautoscale"); case gpsAuto: return TStr("set autoscale"); case gpsLog: return TStr("set logscale"); case gpsLog2X: return TStr("set logscale x 2"); case gpsLog2Y: return TStr("set logscale y 2"); case gpsLog2XY: return TStr("set logscale xy 2"); case gpsLog10X: return TStr("set logscale x 10"); case gpsLog10Y: return TStr("set logscale y 10"); case gpsLog10XY: return TStr("set logscale xy 10"); default: Fail; } return TStr(); }
TStr TGnuPlot::GetSeriesPlotStr | ( | const int & | PlotN | ) |
Definition at line 122 of file gnuplot.cpp.
{ TChA PlotStr; TGpSeries& Series = SeriesV[SeriesId]; if (SeriesId != 0) PlotStr += ",\\\n\t"; if (Series.XCol >= 0) { PlotStr += "\"" + Series.DataFNm + "\" using " + TInt::GetStr(Series.XCol); if (Series.YCol != 0) { PlotStr += ":" + TInt::GetStr(Series.YCol); } if (Series.ZCol != 0) { PlotStr += ":" + TInt::GetStr(Series.ZCol); } else if (Series.SeriesTy==gpwFilledCurves) { PlotStr += ":(0)"; } // filled curves requres 3rd column } else { // function //IAssertR(Series.DataFNm.SearchCh('=') != -1, TStr::Fmt("Expression %s is not a function", Series.DataFNm.CStr())); PlotStr += Series.DataFNm; } PlotStr += " title \"" + Series.Label + "\""; // hard coded line style if (Series.WithStyle.Empty()) { if (Series.SeriesTy == gpwLines) Series.WithStyle = "lw 1"; //if (Series.SeriesTy == gpwPoints) Series.WithStyle = "pt 6 ps 1 lw 1"; // circles //if (Series.SeriesTy == gpwLinesPoints) Series.WithStyle = "pt 6 ps 1 lw 1"; // circles if (Series.SeriesTy == gpwBoxes) Series.WithStyle = "fill solid 0.3"; } PlotStr += " with " + GetSeriesTyStr(Series.SeriesTy) + " " + Series.WithStyle; return PlotStr; }
TStr TGnuPlot::GetSeriesTyStr | ( | const TGpSeriesTy & | SeriesTy | ) | [static] |
Definition at line 692 of file gnuplot.cpp.
{ switch(SeriesTy) { case gpwLines: return TStr("lines"); case gpwPoints: return TStr("points"); case gpwLinesPoints: return TStr("linespoints"); case gpwImpulses: return TStr("impulses"); case gpwDots: return TStr("dots"); case gpwSteps: return TStr("steps"); case gpwFSteps: return TStr("fsteps"); case gpwHiSteps: return TStr("histeps"); case gpwBoxes: return TStr("boxes"); case gpwErrBars: return TStr("errorbars"); case gpwFilledCurves: return TStr("filledcurves"); default: Fail; } return TStr(); }
int TGnuPlot::GetTics42 | ( | ) | [static, private] |
Definition at line 16 of file gnuplot.cpp.
{ #ifdef GLib_WIN return -1; #else FILE* p; char Buf[1024]; char Version[1024]; size_t n; // get gnuplot version p = popen("gnuplot -V","r"); if (p == NULL) { return -1; } n = fread(Buf, 1, 100, p); if (n <= 0) { return -1; } Buf[n] = '\0'; pclose(p); // printf("Buf %d .%s.\n", n, Buf); n = sscanf(Buf, "gnuplot %s", Version); if (n <= 0) { return -1; } // printf("Version %d .%s.\n", n, Version); if ((strlen(Version) < 3) || (Version[1] != '.')) { return -1; } // test version < 4.2 if ((Version[0] < '4') || ((Version[0] == '4') && (Version[2] < '2'))) { // printf("TGnuPlot::GetTics42 0\n"); return 0; } // printf("TGnuPlot::GetTics42 1\n"); return 1; #endif }
int TGnuPlot::IsSameXCol | ( | const int & | CurId, |
const int & | PrevId | ||
) | const |
Definition at line 751 of file gnuplot.cpp.
{ //if (SerId < 1) { return -1; } if (SeriesV[CurId].XYValV.Len() != SeriesV[PrevId].XYValV.Len()) { return -1; } for (int x = 0; x < SeriesV[CurId].XYValV.Len(); x++) { if (SeriesV[CurId].XYValV[x] != SeriesV[PrevId].XYValV[x]) { return -1; } } IAssert(SeriesV[PrevId].XCol > 0); return SeriesV[PrevId].XCol; }
void TGnuPlot::LoadTs | ( | const TStr & | FNm, |
TStrV & | ColNmV, | ||
TVec< TFltKdV > & | ColV | ||
) | [static] |
Definition at line 658 of file gnuplot.cpp.
{ PSs Ss = TSs::LoadTxt(ssfTabSep, FNm); int row = 0; ColNmV.Clr(); while (Ss->At(0, row)[0] == '#') { row++; } for (int c = 1; c < Ss->GetXLen(row); c+=2) { ColNmV.Add(Ss->At(c, row)); } row++; ColV.Gen(ColNmV.Len(), ColNmV.Len()); for (; row < Ss->GetYLen(); row++) { for (int c = 0; c < Ss->GetXLen(row); c+=2) { if (Ss->At(c,row).Empty()) break; ColV[c/2].Add(TFltKd(Ss->At(c,row).GetFlt(), Ss->At(c+1,row).GetFlt())); } } }
void TGnuPlot::MakeExpBins | ( | const TFltPrV & | XYValV, |
TFltPrV & | ExpXYValV, | ||
const double & | BinFactor = 2 , |
||
const double & | MinYVal = 1 |
||
) | [static] |
Definition at line 607 of file gnuplot.cpp.
{ TFltKdV KdV(XYValV.Len(), 0), OutV; for (int i = 0; i < XYValV.Len(); i++) { KdV.Add(TFltKd(XYValV[i].Val1, XYValV[i].Val2)); } KdV.Sort(); TGnuPlot::MakeExpBins(KdV, OutV, BinFactor, MinYVal); ExpXYValV.Gen(OutV.Len(), 0); for (int i = 0; i < OutV.Len(); i++) { ExpXYValV.Add(TFltPr(OutV[i].Key, OutV[i].Dat)); } }
void TGnuPlot::MakeExpBins | ( | const TFltKdV & | XYValV, |
TFltKdV & | ExpXYValV, | ||
const double & | BinFactor = 2 , |
||
const double & | MinYVal = 1 |
||
) | [static] |
Definition at line 618 of file gnuplot.cpp.
{ if (XYValV.Empty()) { ExpXYValV.Clr(false); return; } IAssert(! XYValV.Empty()); IAssert(XYValV.IsSorted()); const TFlt MxX = XYValV.Last().Key; // find buckets TFltV BucketEndV; BucketEndV.Add(1); double PrevBPos = 1, BPos = 1; while (BPos <= MxX) { PrevBPos = (uint) floor(BPos); BPos *= BinFactor; if (floor(BPos) == PrevBPos) { BPos = PrevBPos + 1; } BucketEndV.Add(floor(BPos)); } //printf("buckets:\n"); for (int i = 0; i < BucketEndV.Len(); i++) { printf("\t%g\n", BucketEndV[i]);} ExpXYValV.Gen(BucketEndV.Len(), 0); int CurB = 0; double AvgPos=0, Cnt=0, AvgVal=0; for (int v = 0; v < XYValV.Len(); v++) { if (XYValV[v].Key() == 0.0) { continue; } AvgPos += XYValV[v].Key ;//* XYValV[v].Dat; // x AvgVal += XYValV[v].Dat; // y Cnt++; if (v+1 == XYValV.Len() || XYValV[v+1].Key > BucketEndV[CurB]) { if (Cnt != 0) { //AvgPos /= AvgVal; //AvgVal /= (BucketEndV[CurB]-BucketEndV[CurB-1]); AvgPos /= (double) Cnt; AvgVal /= (double) Cnt; if (AvgVal < MinYVal) { AvgVal = MinYVal; } ExpXYValV.Add(TFltKd(AvgPos, AvgVal)); //printf("b: %6.2f\t%6.2f\n", AvgPos, AvgVal); AvgPos = 0; AvgVal = 0; Cnt = 0; } CurB++; } } }
Definition at line 104 of file gnuplot.cpp.
{ if (this != &GnuPlot) { DataFNm = GnuPlot.DataFNm; PlotFNm = GnuPlot.PlotFNm; Title = GnuPlot.Title; LblX = GnuPlot.LblX; LblY = GnuPlot.LblY; ScaleTy = GnuPlot.ScaleTy; YRange = GnuPlot.YRange; XRange = GnuPlot.XRange; SetGrid = GnuPlot.SetGrid; SetPause = GnuPlot.SetPause; SeriesV = GnuPlot.SeriesV; MoreCmds = GnuPlot.MoreCmds; } return *this; }
void TGnuPlot::Pause | ( | const bool & | DoPause | ) | [inline] |
void TGnuPlot::Plot | ( | const TStr & | Comment = TStr() | ) | [inline] |
Definition at line 120 of file gnuplot.h.
{ CreatePlotFile(Comment); RunGnuPlot(); }
void TGnuPlot::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 & | PlotNCDF = false , |
||
const bool & | ExpBucket = false |
||
) | [static] |
Definition at line 291 of file gnuplot.h.
{ TFltPrV IdCntV(ValCntH.Len(), 0), BucketV; for (int i = ValCntH.FFirstKeyId(); ValCntH.FNextKeyId(i); ) { IdCntV.Add(TFltPr(double(ValCntH.GetKey(i)), double(ValCntH[i]))); } IdCntV.Sort(); if (ExpBucket) { TGnuPlot::MakeExpBins(IdCntV, BucketV); BucketV.Swap(IdCntV); } if (PlotNCDF) { TFltPrV NCdfV = IdCntV; for (int i = NCdfV.Len()-2; i >= 0; i--) { NCdfV[i].Val2 = NCdfV[i].Val2 + NCdfV[i+1].Val2; } PlotValV(NCdfV, OutFNmPref, Desc, "NCDF "+XLabel, "NCDF "+YLabel, ScaleTy, PowerFit, SeriesTy); } else { PlotValV(IdCntV, OutFNmPref, Desc, XLabel, YLabel, ScaleTy, PowerFit, SeriesTy); } }
void TGnuPlot::PlotValCntH | ( | const THash< TKey, TVal, THashFunc > & | ValCntH1, |
const TStr & | Label1, | ||
const THash< TKey, TVal, THashFunc > & | ValCntH2, | ||
const TStr & | Label2, | ||
const TStr & | OutFNmPref, | ||
const TStr & | Desc, | ||
const TStr & | XLabel, | ||
const TStr & | YLabel, | ||
const TGpScaleTy & | ScaleTy = gpsAuto , |
||
const TGpSeriesTy & | SeriesTy = gpwLinesPoints |
||
) | [static] |
Definition at line 314 of file gnuplot.h.
{ PlotValCntH(ValCntH1, Label1, ValCntH2, Label2, THash<TKey, TVal, THashFunc>(), "", OutFNmPref, Desc, XLabel, YLabel, ScaleTy, SeriesTy); }
void TGnuPlot::PlotValCntH | ( | const THash< TKey, TVal, THashFunc > & | ValCntH1, |
const TStr & | Label1, | ||
const THash< TKey, TVal, THashFunc > & | ValCntH2, | ||
const TStr & | Label2, | ||
const THash< TKey, TVal, THashFunc > & | ValCntH3, | ||
const TStr & | Label3, | ||
const TStr & | OutFNmPref, | ||
const TStr & | Desc, | ||
const TStr & | XLabel, | ||
const TStr & | YLabel, | ||
const TGpScaleTy & | ScaleTy = gpsAuto , |
||
const TGpSeriesTy & | SeriesTy = gpwLinesPoints |
||
) | [static] |
Definition at line 323 of file gnuplot.h.
{ TFltPrV IdCntV1(ValCntH1.Len(), 0), IdCntV2(ValCntH2.Len(), 0), IdCntV3(ValCntH3.Len(), 0); for (int i = ValCntH1.FFirstKeyId(); ValCntH1.FNextKeyId(i); ) { IdCntV1.Add(TFltPr(double(ValCntH1.GetKey(i)), double(ValCntH1[i]))); } for (int i = ValCntH2.FFirstKeyId(); ValCntH2.FNextKeyId(i); ) { IdCntV2.Add(TFltPr(double(ValCntH2.GetKey(i)), double(ValCntH2[i]))); } for (int i = ValCntH3.FFirstKeyId(); ValCntH3.FNextKeyId(i); ) { IdCntV3.Add(TFltPr(double(ValCntH3.GetKey(i)), double(ValCntH3[i]))); } IdCntV1.Sort(); IdCntV2.Sort(); IdCntV3.Sort(); TGnuPlot GP(OutFNmPref, Desc); GP.SetXYLabel(XLabel, YLabel); GP.SetScale(ScaleTy); if (! IdCntV1.Empty()) { GP.AddPlot(IdCntV1, SeriesTy, Label1); } if (! IdCntV2.Empty()) { GP.AddPlot(IdCntV2, SeriesTy, Label2); } if (! IdCntV3.Empty()) { GP.AddPlot(IdCntV3, SeriesTy, Label3); } GP.SavePng(); }
void TGnuPlot::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 |
||
) | [static] |
Definition at line 426 of file gnuplot.h.
{ TFltTrV AvgV, StdErrV; TFltPrV AvgV2, MedV, MinV, MaxV; TFltPrV ScatterV; for (int i = ValMomH.FFirstKeyId(); ValMomH.FNextKeyId(i); ) { TMom Mom(ValMomH[i]); if (! Mom.IsDef()) { Mom.Def(); } const double x = ValMomH.GetKey(i); if (PlotAvg) { if (PlotSDev) { AvgV.Add(TFltTr(x, Mom.GetMean(), Mom.GetSDev())); } // std deviation else { AvgV2.Add(TFltPr(x, Mom.GetMean())); } if (PlotStdErr) { StdErrV.Add(TFltTr(x, Mom.GetMean(), Mom.GetSDev()/sqrt((double)Mom.GetVals()))); } } if (PlotMed) { MedV.Add(TFltPr(x, Mom.GetMedian())); } if (PlotMin) { MinV.Add(TFltPr(x, Mom.GetMn())); } if (PlotMax) { MaxV.Add(TFltPr(x, Mom.GetMx())); } if (PlotScatter) { THashSet<TFlt> PointSet; for (int xi = 0; xi < ValMomH[i].GetVals(); xi++) { PointSet.AddKey(ValMomH[i].GetVal(xi)); } //ScatterV.Add(TFltPr(x, ValMomH[i].GetVal(xi))); } for (int xi = 0; xi < PointSet.Len(); xi++) { ScatterV.Add(TFltPr(x, PointSet[xi])); } //printf("S%d %d %d.", ValMomH[i].GetVals(), PointSet.Len(), ScatterV.Len()); } } AvgV.Sort(); AvgV2.Sort(); MedV.Sort(); MinV.Sort(); MaxV.Sort(); StdErrV.Sort(); TGnuPlot GP(OutFNmPref, Desc); GP.SetScale(ScaleTy); GP.SetXYLabel(XLabel, YLabel); if (! ScatterV.Empty()) { GP.AddPlot(ScatterV, gpwPoints, "Scatter"); } if (! AvgV.Empty()) { GP.AddErrBar(AvgV, "Average", "StdDev"); } if (! AvgV2.Empty()) { GP.AddPlot(AvgV2, SeriesTy, "Average"); } if (! MedV.Empty()) { GP.AddPlot(MedV, SeriesTy, "Median"); } if (! MinV.Empty()) { GP.AddPlot(MinV, SeriesTy, "Min"); } if (! MaxV.Empty()) { GP.AddPlot(MaxV, SeriesTy, "Max"); } if (! StdErrV.Empty()) { GP.AddErrBar(StdErrV, "Standard error"); } GP.SavePng(); }
void TGnuPlot::PlotValV | ( | const TVec< TPair< TVal1, TVal2 > > & | 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 |
||
) | [static] |
Definition at line 348 of file gnuplot.h.
{ TFltKdV IdCntV(ValV.Len(), 0); for (int i = 0; i < ValV.Len(); i++) { IdCntV.Add(TFltKd(double(ValV[i].Val1), double(ValV[i].Val2))); } if (IdCntV.Empty()) { printf("*** Empty plot %s\n", OutFNmPref.CStr()); return; } IdCntV.Sort(); TGnuPlot GP(OutFNmPref, Desc); GP.SetXYLabel(XLabel, YLabel); GP.SetScale(ScaleTy); const int Id = GP.AddPlot(IdCntV, SeriesTy); if (PowerFit) { GP.AddPwrFit3(Id); double MaxY = IdCntV.Last().Dat, MinY = IdCntV[0].Dat; if (MaxY < MinY) { Swap(MaxY, MinY); } //GP.SetYRange(MinY, pow(10.0, floor(log10(MaxY))+1.0)); GP.AddCmd(TStr::Fmt("set yrange[%f:]", MinY)); } GP.SavePng(); }
void TGnuPlot::PlotValV | ( | const TVec< TPair< TVal1, TVal2 > > & | ValV1, |
const TStr & | Name1, | ||
const TVec< TPair< TVal1, TVal2 > > & | ValV2, | ||
const TStr & | Name2, | ||
const TStr & | OutFNmPref, | ||
const TStr & | Desc = "" , |
||
const TStr & | XLabel = "" , |
||
const TStr & | YLabel = "" , |
||
const TGpScaleTy & | ScaleTy = gpsAuto , |
||
const bool & | PowerFit = false , |
||
const TGpSeriesTy & | SeriesTy = gpwLinesPoints |
||
) | [static] |
Definition at line 370 of file gnuplot.h.
{ TFltKdV IdCntV1(ValV1.Len(), 0), IdCntV2(ValV2.Len(), 0); for (int i = 0; i < ValV1.Len(); i++) { IdCntV1.Add(TFltKd(double(ValV1[i].Val1), double(ValV1[i].Val2))); } for (int i = 0; i < ValV2.Len(); i++) { IdCntV2.Add(TFltKd(double(ValV2[i].Val1), double(ValV2[i].Val2))); } if (IdCntV1.Empty() || IdCntV2.Empty()) { printf("*** Empty plot %s\n", OutFNmPref.CStr()); return; } IdCntV1.Sort(); IdCntV2.Sort(); TGnuPlot GP(OutFNmPref, Desc); GP.SetXYLabel(XLabel, YLabel); GP.SetScale(ScaleTy); { const int Id = GP.AddPlot(IdCntV1, SeriesTy, Name1); if (PowerFit) { GP.AddPwrFit3(Id); double MaxY = IdCntV1.Last().Dat, MinY = IdCntV1[0].Dat; if (MaxY < MinY) { Swap(MaxY, MinY); } GP.AddCmd(TStr::Fmt("set yrange[%f:]", MinY)); } } { const int Id = GP.AddPlot(IdCntV2, SeriesTy, Name2); if (PowerFit) { GP.AddPwrFit3(Id); double MaxY = IdCntV2.Last().Dat, MinY = IdCntV2[0].Dat; if (MaxY < MinY) { Swap(MaxY, MinY); } GP.AddCmd(TStr::Fmt("set yrange[%f:]", MinY)); } } GP.SavePng(); }
void TGnuPlot::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 |
||
) | [static] |
Definition at line 404 of file gnuplot.h.
{ TFltKdV IdCntV(ValV.Len(), 0); for (int i = 0; i < ValV.Len(); i++) { IdCntV.Add(TFltKd(double(i+1), double(ValV[i]))); } if (IdCntV.Empty()) { printf("*** Empty plot %s\n", OutFNmPref.CStr()); return; } IdCntV.Sort(); TGnuPlot GP(OutFNmPref, Desc); GP.SetXYLabel(XLabel, YLabel); GP.SetScale(ScaleTy); const int Id = GP.AddPlot(IdCntV, SeriesTy); if (PowerFit) { GP.AddPwrFit3(Id); double MaxY = IdCntV.Last().Dat, MinY = IdCntV[0].Dat; if (MaxY < MinY) { Swap(MaxY, MinY); } //GP.SetYRange(MinY, pow(10.0, floor(log10(MaxY))+1.0)); GP.AddCmd(TStr::Fmt("set yrange[%f:]", MinY)); } GP.SavePng(); }
void TGnuPlot::RunGnuPlot | ( | ) | const |
Definition at line 863 of file gnuplot.cpp.
{ TStr GpFNm, GpPath; #if defined(GLib_WIN) GpFNm = "wgnuplot.exe"; GpPath = "C:\\gnuplot\\"; #elif defined(GLib_CYGWIN) GpFNm = "gnuplot.exe"; GpPath = "/usr/bin/"; #else GpFNm = "gnuplot"; GpPath = "/usr/bin/"; #endif if (system(TStr::Fmt("%s %s", GpFNm.CStr(), PlotFNm.CStr()).CStr())==0) { return; } #if defined(GLib_WIN) if (system(TStr::Fmt(".\\%s %s", GpFNm.CStr(), PlotFNm.CStr()).CStr())==0) { return; } #else if (system(TStr::Fmt("./%s %s", GpFNm.CStr(), PlotFNm.CStr()).CStr())==0) { return; } #endif if (system(TStr::Fmt("%s%s %s", GpPath.CStr(), GpFNm.CStr(), PlotFNm.CStr()).CStr())==0) { return; } //FailR(TStr::Fmt("Cat not find GnuPlot (%s) for plot %s. Set the PATH.", GpFNm.CStr(), PlotFNm.CStr()).CStr()); //ErrNotify(TStr::Fmt("Cat not find GnuPlot (%s) for plot %s. Set the PATH.", GpFNm.CStr(), PlotFNm.CStr()).CStr()); fprintf(stderr, "[%s:%d] Cat not find GnuPlot (%s) for plot %s. Set the PATH.\n", __FILE__, __LINE__, GpFNm.CStr(), PlotFNm.CStr()); }
void TGnuPlot::SaveEps | ( | const int & | FontSz = 30 , |
const TStr & | Comment = TStr() |
||
) | [inline] |
void TGnuPlot::SaveEps | ( | const TStr & | FNm, |
const int & | FontSz = 30 , |
||
const TStr & | Comment = TStr() |
||
) |
void TGnuPlot::SavePng | ( | const int & | SizeX = 1000 , |
const int & | SizeY = 800 , |
||
const TStr & | Comment = TStr() |
||
) | [inline] |
void TGnuPlot::SavePng | ( | const TStr & | FNm, |
const int & | SizeX = 1000 , |
||
const int & | SizeY = 800 , |
||
const TStr & | Comment = TStr() , |
||
const TStr & | Terminal = TStr() |
||
) |
Definition at line 576 of file gnuplot.cpp.
{ if (Terminal.Empty()) { //#ifdef GLib_WIN #ifndef GLib_MACOSX // The standard GNUPlot for MacOS does not support PNG AddCmd(TStr::Fmt("set terminal png small size %d,%d", SizeX, SizeY)); AddCmd(TStr::Fmt("set output '%s'", FNm.CStr())); #else // EPS AddCmd("set terminal postscript eps 10 enhanced color"); AddCmd(TStr::Fmt("set output '%s.eps'", FNm.GetFMid().CStr())); #endif } else { AddCmd(Terminal); AddCmd(TStr::Fmt("set output '%s'", FNm.CStr())); } Pause(false); CreatePlotFile(Comment.Empty()? Title : Comment); RunGnuPlot(); MoreCmds.DelLast(); MoreCmds.DelLast(); }
void TGnuPlot::SaveTs | ( | const TIntKdV & | KdV, |
const TStr & | FNm, | ||
const TStr & | HeadLn = TStr() |
||
) | [static] |
static void TGnuPlot::SaveTs | ( | const TIntFltKdV & | KdV, |
const TStr & | FNm, | ||
const TStr & | HeadLn = TStr() |
||
) | [static] |
void TGnuPlot::SaveTs | ( | const TVec< TTriple< TVal1, TVal2, TVal3 > > & | ValV, |
const TStr & | FNm, | ||
const TStr & | HeadLn = TStr() |
||
) | [static] |
void TGnuPlot::SaveTs | ( | const TVec< TTuple< TVal, Vals > > & | ValV, |
const TStr & | FNm, | ||
const TStr & | HeadLn = TStr() |
||
) | [static] |
void TGnuPlot::SetDataPlotFNm | ( | const TStr & | DatFNm, |
const TStr & | PltFNm | ||
) | [inline] |
void TGnuPlot::SetLineStyle | ( | const int & | PlotId, |
const TStr & | StyleStr | ||
) | [inline] |
void TGnuPlot::SetScale | ( | const TGpScaleTy & | GpScaleTy | ) | [inline] |
void TGnuPlot::SetTitle | ( | const TStr & | PlotTitle | ) | [inline] |
void TGnuPlot::SetXLabel | ( | const TStr & | XLabel | ) | [inline] |
void TGnuPlot::SetXRange | ( | const double & | Min, |
const double & | Max | ||
) | [inline] |
void TGnuPlot::SetXYLabel | ( | const TStr & | XLabel, |
const TStr & | YLabel | ||
) | [inline] |
void TGnuPlot::SetYLabel | ( | const TStr & | YLabel | ) | [inline] |
void TGnuPlot::SetYRange | ( | const double & | Min, |
const double & | Max | ||
) | [inline] |
void TGnuPlot::ShowGrid | ( | const bool & | Show | ) | [inline] |
void TGnuPlot::Test | ( | ) | [static] |
Definition at line 729 of file gnuplot.cpp.
{ TFltV DeltaY; TFltPrV ValV1, ValV2, ValV3; for (int i = 1; i < 30; i++) { ValV1.Add(TFltPr(i, pow(double(i), 1.2))); DeltaY.Add(5*TInt::Rnd.GetUniDev()); ValV2.Add(TFltPr(i, 5*i-1)); } for (int i = -10; i < 20; i++) { ValV3.Add(TFltPr(i, 2*i + 2 + TInt::Rnd.GetUniDev())); } TGnuPlot GnuPlot("testDat", "TestPlot", true); GnuPlot.SetXYLabel("X", "Y"); const int id2 = GnuPlot.AddPlot(ValV2, gpwPoints, "y=5*x-1"); const int id3 = GnuPlot.AddPlot(ValV3, gpwPoints, "y=2*x+2"); GnuPlot.AddErrBar(ValV1, DeltaY, "y=x^2", "Error bar"); GnuPlot.AddLinFit(id2, gpwLines); GnuPlot.AddLinFit(id3, gpwLines); GnuPlot.Plot(); GnuPlot.SavePng("testPlot.png"); }
TStr TGnuPlot::DataFNm [private] |
TStr TGnuPlot::DefDataFNm = "GnuPlot.tab" [static] |
TStr TGnuPlot::DefPlotFNm = "GnuPlot.plt" [static] |
TStr TGnuPlot::LblX [private] |
TStr TGnuPlot::LblY [private] |
TStrV TGnuPlot::MoreCmds [private] |
TStr TGnuPlot::PlotFNm [private] |
TGpScaleTy TGnuPlot::ScaleTy [private] |
TVec<TGpSeries> TGnuPlot::SeriesV [private] |
bool TGnuPlot::SetGrid [private] |
bool TGnuPlot::SetPause [private] |
int TGnuPlot::Tics42 = TGnuPlot::GetTics42() [static, private] |
TStr TGnuPlot::Title [private] |
TFltPr TGnuPlot::XRange [private] |
TFltPr TGnuPlot::YRange [private] |