updated impulse plots & doc
@ -168,7 +168,7 @@ if(JKQtPlotter_BUILD_EXAMPLES)
|
|||||||
imageplot_modifier
|
imageplot_modifier
|
||||||
imageplot_nodatastore
|
imageplot_nodatastore
|
||||||
imageplot_userpal/imageplot_userpal_program
|
imageplot_userpal/imageplot_userpal_program
|
||||||
impulsesplot
|
impulsesplot/impulsesplot,impulsesplot_symbols,impulsesplot_horizontal,errorbarstyles_impulses,errorbarstyles_impulses_horizontal
|
||||||
parametriccurve/parametriccurve1,parametriccurve2
|
parametriccurve/parametriccurve1,parametriccurve2
|
||||||
paramscatterplot
|
paramscatterplot
|
||||||
paramscatterplot_customsymbol
|
paramscatterplot_customsymbol
|
||||||
@ -200,6 +200,9 @@ if(JKQtPlotter_BUILD_EXAMPLES)
|
|||||||
filledgraphs_errors/JKQTPFilledCurveXErrorGraph,JKQTPFilledCurveYErrorGraph/--smallscreenshotplot
|
filledgraphs_errors/JKQTPFilledCurveXErrorGraph,JKQTPFilledCurveYErrorGraph/--smallscreenshotplot
|
||||||
evalcurve/JKQTPXYFunctionLineGraph/--smallscreenshotplot
|
evalcurve/JKQTPXYFunctionLineGraph/--smallscreenshotplot
|
||||||
geo_coordinateaxis0/JKQTPCoordinateAxisStyleDrawMode0
|
geo_coordinateaxis0/JKQTPCoordinateAxisStyleDrawMode0
|
||||||
|
impulsesplot/JKQTPImpulsesVerticalGraph,JKQTPImpulsesVerticalGraph_Symbols,JKQTPImpulsesHorizontalGraph,JKQTPImpulsesVerticalErrorGraph,JKQTPImpulsesHorizontalErrorGraph/--smallscreenshotplot
|
||||||
|
symbols_and_errors/JKQTPXYLineErrorGraph_JKQTPErrorBars,JKQTPXYLineErrorGraph_JKQTPErrorLines,JKQTPXYLineErrorGraph_JKQTPErrorPolygons/--iteratefunctorsteps--iteratefunctorsteps_suppressinitial--smallscreenshotplot
|
||||||
|
boxplot/JKQTPBoxplotVerticalGraph,JKQTPBoxplotHorizontalGraph/--iteratefunctorsteps--iteratefunctorsteps_suppressinitial--smallscreenshotplot
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -227,6 +230,7 @@ if(JKQtPlotter_BUILD_EXAMPLES)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
||||||
set(loc_target_name JKQTPlotter_GenerateDocScreenshots_${example})
|
set(loc_target_name JKQTPlotter_GenerateDocScreenshots_${example})
|
||||||
set(dep_name jkqtptest_${example})
|
set(dep_name jkqtptest_${example})
|
||||||
string(TOUPPER ${example} example_upper)
|
string(TOUPPER ${example} example_upper)
|
||||||
@ -265,6 +269,10 @@ if(JKQtPlotter_BUILD_EXAMPLES)
|
|||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if (NOT extra_command STREQUAL "")
|
||||||
|
string(REPLACE "--" ";--" extra_command "${extra_command}")
|
||||||
|
endif()
|
||||||
|
|
||||||
set(loc_target_name JKQTPlotter_GenerateDocImages_${example})
|
set(loc_target_name JKQTPlotter_GenerateDocImages_${example})
|
||||||
set(dep_name jkqtptest_${example})
|
set(dep_name jkqtptest_${example})
|
||||||
string(TOUPPER ${example} example_upper)
|
string(TOUPPER ${example} example_upper)
|
||||||
|
@ -101,7 +101,7 @@ This group assembles graphs that show their data with symbols and optionally wit
|
|||||||
<th> Screenshot
|
<th> Screenshot
|
||||||
<th> Classes
|
<th> Classes
|
||||||
<tr>
|
<tr>
|
||||||
<td>\image html filledgraphs_small.png
|
<td>\image html JKQTPFilledCurveXGraph_small.png
|
||||||
<td> JKQTPFilledCurveXGraph, JKQTPFilledCurveYGraph
|
<td> JKQTPFilledCurveXGraph, JKQTPFilledCurveYGraph
|
||||||
<tr>
|
<tr>
|
||||||
<td>\image html JKQTPFilledCurveXErrorGraph_small.png
|
<td>\image html JKQTPFilledCurveXErrorGraph_small.png
|
||||||
@ -146,19 +146,19 @@ This group assembles graphs that show their data with symbols and optionally wit
|
|||||||
<th> Screenshot
|
<th> Screenshot
|
||||||
<th> Classes
|
<th> Classes
|
||||||
<tr>
|
<tr>
|
||||||
<td>\image html barchart_small.png
|
<td>\image html JKQTPBarVerticalGraph_small.png
|
||||||
<td> JKQTPBarVerticalGraph, JKQTPBarHorizontalGraph
|
<td> JKQTPBarVerticalGraph, JKQTPBarHorizontalGraph
|
||||||
<tr>
|
<tr>
|
||||||
<td>\image html barchart_error_small.png
|
<td>\image html JKQTPBarVerticalErrorGraph_small.png
|
||||||
<td> JKQTPBarVerticalErrorGraph, JKQTPBarHorizontalErrorGraph
|
<td> JKQTPBarVerticalErrorGraph, JKQTPBarHorizontalErrorGraph
|
||||||
<tr>
|
<tr>
|
||||||
<td>\image html JKQTPbarVerticalGraphStacked_small.png
|
<td>\image html JKQTPbarVerticalGraphStacked_small.png
|
||||||
<td> JKQTPBarVerticalStackableGraph, JKQTPBarHorizontalStackableGraph
|
<td> JKQTPBarVerticalStackableGraph, JKQTPBarHorizontalStackableGraph
|
||||||
<tr>
|
<tr>
|
||||||
<td>\image html impulsesplot_small.png
|
<td>\image html JKQTPImpulsesVerticalGraph_Symbols_small.png
|
||||||
<td> JKQTPImpulsesHorizontalGraph, JKQTPImpulsesVerticalGraph
|
<td> JKQTPImpulsesHorizontalGraph, JKQTPImpulsesVerticalGraph
|
||||||
<tr>
|
<tr>
|
||||||
<td>\image html impulses_errors_small.png
|
<td>\image html JKQTPImpulsesVerticalErrorGraph_small.png
|
||||||
<td> JKQTPImpulsesHorizontalErrorGraph, JKQTPImpulsesVerticalErrorGraph
|
<td> JKQTPImpulsesHorizontalErrorGraph, JKQTPImpulsesVerticalErrorGraph
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 6.9 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 7.4 KiB |
BIN
doc/images/JKQTPBoxplotHorizontalGraph.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
doc/images/JKQTPBoxplotHorizontalGraph_small.png
Normal file
After Width: | Height: | Size: 8.0 KiB |
BIN
doc/images/JKQTPBoxplotVerticalGraph.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
doc/images/JKQTPBoxplotVerticalGraph_small.png
Normal file
After Width: | Height: | Size: 7.6 KiB |
BIN
doc/images/JKQTPImpulsesHorizontalErrorGraph.png
Normal file
After Width: | Height: | Size: 8.8 KiB |
BIN
doc/images/JKQTPImpulsesHorizontalErrorGraph_small.png
Normal file
After Width: | Height: | Size: 7.3 KiB |
BIN
doc/images/JKQTPImpulsesHorizontalGraph.png
Normal file
After Width: | Height: | Size: 8.4 KiB |
BIN
doc/images/JKQTPImpulsesHorizontalGraph_small.png
Normal file
After Width: | Height: | Size: 6.9 KiB |
BIN
doc/images/JKQTPImpulsesVerticalErrorGraph.png
Normal file
After Width: | Height: | Size: 9.8 KiB |
BIN
doc/images/JKQTPImpulsesVerticalErrorGraph_small.png
Normal file
After Width: | Height: | Size: 5.0 KiB |
BIN
doc/images/JKQTPImpulsesVerticalGraph.png
Normal file
After Width: | Height: | Size: 8.2 KiB |
BIN
doc/images/JKQTPImpulsesVerticalGraph_Symbols.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
doc/images/JKQTPImpulsesVerticalGraph_Symbols_small.png
Normal file
After Width: | Height: | Size: 7.1 KiB |
BIN
doc/images/JKQTPImpulsesVerticalGraph_small.png
Normal file
After Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 39 KiB |
BIN
doc/images/JKQTPXYLineErrorGraph_JKQTPErrorBars.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
doc/images/JKQTPXYLineErrorGraph_JKQTPErrorBars_small.png
Normal file
After Width: | Height: | Size: 9.6 KiB |
BIN
doc/images/JKQTPXYLineErrorGraph_JKQTPErrorLines.png
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
doc/images/JKQTPXYLineErrorGraph_JKQTPErrorLines_small.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
doc/images/JKQTPXYLineErrorGraph_JKQTPErrorPolygons.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
doc/images/JKQTPXYLineErrorGraph_JKQTPErrorPolygons_small.png
Normal file
After Width: | Height: | Size: 9.8 KiB |
Before Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 78 KiB |
Before Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 12 KiB |
@ -164,7 +164,7 @@ int main(int argc, char* argv[])
|
|||||||
|
|
||||||
// 10. show plotter and make it a decent size
|
// 10. show plotter and make it a decent size
|
||||||
plot.show();
|
plot.show();
|
||||||
plot.resize(600,600);
|
plot.resize(600/plot.devicePixelRatioF(),600/plot.devicePixelRatioF());
|
||||||
|
|
||||||
return app.exec();
|
return app.exec();
|
||||||
}
|
}
|
||||||
|
@ -100,7 +100,7 @@ void doExample(const QString& title)
|
|||||||
// show plotter and make it a decent size
|
// show plotter and make it a decent size
|
||||||
plot->setWindowTitle(title);
|
plot->setWindowTitle(title);
|
||||||
plot->show();
|
plot->show();
|
||||||
plot->resize(600,400);
|
plot->resize(600/plot->devicePixelRatioF(),550/plot->devicePixelRatioF());
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char* argv[])
|
int main(int argc, char* argv[])
|
||||||
|
@ -115,7 +115,19 @@ int main(int argc, char* argv[])
|
|||||||
|
|
||||||
// show plotter and make it a decent size
|
// show plotter and make it a decent size
|
||||||
plot.show();
|
plot.show();
|
||||||
plot.resize(600,600);
|
plot.resize(600/plot.devicePixelRatioF(),600/plot.devicePixelRatioF());
|
||||||
|
|
||||||
|
app.addExportStepFunctor([&]() {
|
||||||
|
graph->setVisible(true);
|
||||||
|
graphOutliers->setVisible(false);
|
||||||
|
graphh->setVisible(false);
|
||||||
|
plot.zoomToFit();
|
||||||
|
});
|
||||||
|
app.addExportStepFunctor([&]() {
|
||||||
|
graph->setVisible(false);
|
||||||
|
graphOutliers->setVisible(false);
|
||||||
|
graphh->setVisible(true);
|
||||||
|
plot.zoomToFit();
|
||||||
|
});
|
||||||
return app.exec();
|
return app.exec();
|
||||||
}
|
}
|
||||||
|
@ -10,38 +10,41 @@
|
|||||||
#include "jkqtplotter/graphs/jkqtpimpulses.h"
|
#include "jkqtplotter/graphs/jkqtpimpulses.h"
|
||||||
|
|
||||||
// number of datapoints:
|
// number of datapoints:
|
||||||
#define Ndata 40
|
|
||||||
|
|
||||||
int main(int argc, char* argv[])
|
template<class TGRAPH>
|
||||||
{
|
TGRAPH* drawPlot(JKQTPlotter& plot, int NData=40, double baseline=0.0) {
|
||||||
|
|
||||||
JKQTPAppSettingController highDPIController(argc, argv);
|
|
||||||
JKQTPExampleApplication app(argc, argv);
|
|
||||||
|
|
||||||
|
|
||||||
// 1. create a plotter window and get a pointer to the internal datastore (for convenience)
|
|
||||||
JKQTPlotter plot;
|
|
||||||
JKQTPDatastore* ds=plot.getDatastore();
|
JKQTPDatastore* ds=plot.getDatastore();
|
||||||
|
|
||||||
// 2. now we create data for a simple plot (a sine curve with lin. increasing errors)
|
// 2. now we create data for a simple plot (a sine curve with lin. increasing errors)
|
||||||
QVector<double> X, Y;
|
QVector<double> X, Y, E;
|
||||||
for (int i=0; i<Ndata; i++) {
|
for (int i=0; i<NData; i++) {
|
||||||
const double xx=double(i)/double(Ndata)*6.0*JKQTPSTATISTICS_PI;
|
const double xx=double(i)/40.0*8.0*JKQTPSTATISTICS_PI;
|
||||||
X << xx;
|
X << xx;
|
||||||
Y << cos(xx)*exp(-xx/10.0);
|
Y << cos(xx)*exp(-xx/10.0);
|
||||||
|
E << 0.2*Y.last();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. add data from vectors to the datastore
|
// 3. add data from vectors to the datastore
|
||||||
size_t columnX=ds->addCopiedColumn(X, "x");
|
size_t columnX=ds->addCopiedColumn(X, "x");
|
||||||
size_t columnY=ds->addCopiedColumn(Y, "y");
|
size_t columnY=ds->addCopiedColumn(Y, "y");
|
||||||
|
size_t columnE=ds->addCopiedColumn(E, "e");
|
||||||
|
|
||||||
// 4. create a vertical impulse graph in the plot, which plots the dataset X/Y:
|
// 4. create a vertical impulse graph in the plot, which plots the dataset X/Y:
|
||||||
JKQTPImpulsesVerticalGraph* graph=new JKQTPImpulsesVerticalGraph(&plot);
|
TGRAPH* graph=new TGRAPH(&plot);
|
||||||
graph->setXColumn(columnX);
|
graph->setKeyColumn(columnX);
|
||||||
graph->setYColumn(columnY);
|
graph->setValueColumn(columnY);
|
||||||
graph->setLineWidth(2);
|
graph->setLineWidth(2);
|
||||||
|
graph->setBaseline(baseline);
|
||||||
graph->setColor(QColor("red"));
|
graph->setColor(QColor("red"));
|
||||||
graph->setTitle(QObject::tr("$\\cos(x)\\cdot\\exp(-x/10)$"));
|
graph->setTitle(QObject::tr("$\\cos(x)\\cdot\\exp(-x/10)$"));
|
||||||
|
if (dynamic_cast<JKQTPYGraphErrors*>(graph)) {
|
||||||
|
dynamic_cast<JKQTPYGraphErrors*>(graph)->setYErrorColumn(columnE);
|
||||||
|
dynamic_cast<JKQTPYGraphErrors*>(graph)->setYErrorStyle(JKQTPErrorBars);
|
||||||
|
}
|
||||||
|
if (dynamic_cast<JKQTPXGraphErrors*>(graph)) {
|
||||||
|
dynamic_cast<JKQTPXGraphErrors*>(graph)->setXErrorColumn(columnE);
|
||||||
|
dynamic_cast<JKQTPXGraphErrors*>(graph)->setXErrorStyle(JKQTPErrorBars);
|
||||||
|
}
|
||||||
//graph->setDrawSymbols(true);
|
//graph->setDrawSymbols(true);
|
||||||
//graph->setSymbolType(JKQTPGraphSymbols::JKQTPFilledStar);
|
//graph->setSymbolType(JKQTPGraphSymbols::JKQTPFilledStar);
|
||||||
//graph->setBaseline(0.25);
|
//graph->setBaseline(0.25);
|
||||||
@ -59,10 +62,53 @@ int main(int argc, char* argv[])
|
|||||||
|
|
||||||
// 8. autoscale the plot so the graph is contained
|
// 8. autoscale the plot so the graph is contained
|
||||||
plot.zoomToFit();
|
plot.zoomToFit();
|
||||||
|
plot.getPlotter()->setShowKey(false);
|
||||||
|
|
||||||
// show plotter and make it a decent size
|
// show plotter and make it a decent size
|
||||||
plot.show();
|
plot.show();
|
||||||
plot.resize(600/plot.devicePixelRatioF(),400/plot.devicePixelRatioF());
|
plot.resize(600/plot.devicePixelRatioF(),400/plot.devicePixelRatioF());
|
||||||
|
|
||||||
|
return graph;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
|
||||||
|
JKQTPAppSettingController highDPIController(argc, argv);
|
||||||
|
JKQTPExampleApplication app(argc, argv);
|
||||||
|
|
||||||
|
|
||||||
|
// 1. create a plotter window and get a pointer to the internal datastore (for convenience)
|
||||||
|
JKQTPlotter plot;
|
||||||
|
drawPlot<JKQTPImpulsesVerticalGraph>(plot);
|
||||||
|
plot.setWindowTitle("1: JKQTPImpulsesVerticalGraph");
|
||||||
|
|
||||||
|
// 1. create a plotter window and get a pointer to the internal datastore (for convenience)
|
||||||
|
JKQTPlotter plotS;
|
||||||
|
auto grS=drawPlot<JKQTPImpulsesVerticalGraph>(plotS, 25);
|
||||||
|
plotS.setWindowTitle("2: JKQTPImpulsesVerticalGraph + Symbols");
|
||||||
|
grS->setDrawSymbols(true);
|
||||||
|
grS->setSymbolType(JKQTPFilledStar);
|
||||||
|
grS->setSymbolFillColor(QColor("cornflowerblue"));
|
||||||
|
grS->setSymbolColor(QColor("blue"));
|
||||||
|
grS->setSymbolSize(12);
|
||||||
|
|
||||||
|
JKQTPlotter plotH;
|
||||||
|
drawPlot<JKQTPImpulsesHorizontalGraph>(plotH);
|
||||||
|
plotH.setWindowTitle("3: JKQTPImpulsesHorizontalGraph");
|
||||||
|
plotH.resize(400/plot.devicePixelRatioF(),600/plot.devicePixelRatioF());
|
||||||
|
|
||||||
|
JKQTPlotter plotE;
|
||||||
|
auto grE=drawPlot<JKQTPImpulsesVerticalErrorGraph>(plotE,10);
|
||||||
|
plotE.setWindowTitle("4: JKQTPImpulsesVerticalErrorGraph");
|
||||||
|
grE->setLineWidth(5);
|
||||||
|
|
||||||
|
JKQTPlotter plotEH;
|
||||||
|
auto grEH=drawPlot<JKQTPImpulsesHorizontalErrorGraph>(plotEH,10);
|
||||||
|
plotEH.setWindowTitle("5: JKQTPImpulsesHorizontalErrorGraph");
|
||||||
|
grEH->setLineWidth(4);
|
||||||
|
plotEH.resize(400/plot.devicePixelRatioF(),600/plot.devicePixelRatioF());
|
||||||
|
|
||||||
|
|
||||||
return app.exec();
|
return app.exec();
|
||||||
}
|
}
|
||||||
|
@ -68,7 +68,28 @@ int main(int argc, char* argv[])
|
|||||||
|
|
||||||
// show plotter and make it a decent size
|
// show plotter and make it a decent size
|
||||||
plot.show();
|
plot.show();
|
||||||
plot.resize(600/plot.devicePixelRatioF(),400/plot.devicePixelRatioF());
|
plot.resize(600/plot.devicePixelRatioF(),500/plot.devicePixelRatioF());
|
||||||
|
|
||||||
|
app.addExportStepFunctor([&]() {
|
||||||
|
plot.getXAxis()->setAxisLabel(QObject::tr("$x$-axis [mm]"));
|
||||||
|
plot.getYAxis()->setAxisLabel(QObject::tr("$y$-axis [mm]"));
|
||||||
|
plot.getXAxis()->setTickLabelFontSize(8);
|
||||||
|
plot.getYAxis()->setTickLabelFontSize(8);
|
||||||
|
graph1->setDrawLine(true);
|
||||||
|
graph1->setYErrorStyle(JKQTPErrorBars);
|
||||||
|
plot.redrawPlot();
|
||||||
|
});
|
||||||
|
app.addExportStepFunctor([&]() {
|
||||||
|
graph1->setSymbolType(JKQTPNoSymbol);
|
||||||
|
graph1->setDrawLine(true);
|
||||||
|
graph1->setYErrorStyle(JKQTPErrorLines);
|
||||||
|
plot.redrawPlot();
|
||||||
|
});
|
||||||
|
app.addExportStepFunctor([&]() {
|
||||||
|
graph1->setSymbolType(JKQTPNoSymbol);
|
||||||
|
graph1->setDrawLine(true);
|
||||||
|
graph1->setYErrorStyle(JKQTPErrorPolygons);
|
||||||
|
plot.redrawPlot();
|
||||||
|
});
|
||||||
return app.exec();
|
return app.exec();
|
||||||
}
|
}
|
||||||
|
@ -66,6 +66,91 @@ bool JKQTPImpulsesGraphBase::getDrawSymbols() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool JKQTPImpulsesGraphBase::getValuesMinMax(double &mmin, double &mmax, double &smallestGreaterZero)
|
||||||
|
{
|
||||||
|
mmin=0;
|
||||||
|
mmax=0;
|
||||||
|
smallestGreaterZero=0;
|
||||||
|
if (getBaseline()>0) {
|
||||||
|
smallestGreaterZero=getBaseline();
|
||||||
|
mmin=getBaseline();
|
||||||
|
mmax=getBaseline();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (getKeyColumn()<0 || getValueColumn()<0) return false;
|
||||||
|
|
||||||
|
const size_t datacol=static_cast<size_t>(getValueColumn());
|
||||||
|
|
||||||
|
if (parent==nullptr) return false;
|
||||||
|
|
||||||
|
const JKQTPDatastore* datastore=parent->getDatastore();
|
||||||
|
int imin=0, imax=0;
|
||||||
|
if (getIndexRange(imin, imax)) {
|
||||||
|
|
||||||
|
|
||||||
|
for (int i=imin; i<imax; i++) {
|
||||||
|
double yv=getBaseline();
|
||||||
|
if (JKQTPIsOKFloat(yv)) {
|
||||||
|
if (yv>mmax) mmax=yv;
|
||||||
|
if (yv<mmin) mmin=yv;
|
||||||
|
double xvsgz;
|
||||||
|
xvsgz=yv; SmallestGreaterZeroCompare_xvsgz();
|
||||||
|
}
|
||||||
|
yv=datastore->get(datacol,static_cast<size_t>(i));
|
||||||
|
if (JKQTPIsOKFloat(yv)) {
|
||||||
|
if (yv>mmax) mmax=yv;
|
||||||
|
if (yv<mmin) mmin=yv;
|
||||||
|
double xvsgz;
|
||||||
|
xvsgz=yv; SmallestGreaterZeroCompare_xvsgz();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool JKQTPImpulsesGraphBase::getPositionsMinMax(double &mmin, double &mmax, double &smallestGreaterZero)
|
||||||
|
{
|
||||||
|
bool start=true;
|
||||||
|
mmin=0;
|
||||||
|
mmax=0;
|
||||||
|
smallestGreaterZero=0;
|
||||||
|
|
||||||
|
if (getKeyColumn()<0 || getValueColumn()<0) return false;
|
||||||
|
|
||||||
|
const size_t poscol=static_cast<size_t>(getKeyColumn());
|
||||||
|
|
||||||
|
if (parent==nullptr) return false;
|
||||||
|
|
||||||
|
const JKQTPDatastore* datastore=parent->getDatastore();
|
||||||
|
int imin=0, imax=0;
|
||||||
|
if (getIndexRange(imin, imax)) {
|
||||||
|
for (int i=imin; i<imax; i++) {
|
||||||
|
double xv=datastore->get(poscol,static_cast<size_t>(i));
|
||||||
|
|
||||||
|
|
||||||
|
if (JKQTPIsOKFloat(xv)) {
|
||||||
|
|
||||||
|
if (start || xv>mmax) mmax=xv;
|
||||||
|
if (start || xv<mmin) mmin=xv;
|
||||||
|
double xvsgz;
|
||||||
|
xvsgz=xv; SmallestGreaterZeroCompare_xvsgz();
|
||||||
|
xvsgz=xv; SmallestGreaterZeroCompare_xvsgz();
|
||||||
|
start=false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return !start;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
JKQTPImpulsesHorizontalGraph::JKQTPImpulsesHorizontalGraph(JKQTBasePlotter* parent):
|
JKQTPImpulsesHorizontalGraph::JKQTPImpulsesHorizontalGraph(JKQTBasePlotter* parent):
|
||||||
JKQTPImpulsesGraphBase(parent)
|
JKQTPImpulsesGraphBase(parent)
|
||||||
{
|
{
|
||||||
@ -144,6 +229,37 @@ void JKQTPImpulsesHorizontalGraph::drawKeyMarker(JKQTPEnhancedPainter& painter,
|
|||||||
painter.drawLine(rect.left(), y, rect.right(), y);
|
painter.drawLine(rect.left(), y, rect.right(), y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int JKQTPImpulsesHorizontalGraph::getKeyColumn() const
|
||||||
|
{
|
||||||
|
return getYColumn();
|
||||||
|
}
|
||||||
|
|
||||||
|
int JKQTPImpulsesHorizontalGraph::getValueColumn() const
|
||||||
|
{
|
||||||
|
return getXColumn();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool JKQTPImpulsesHorizontalGraph::getXMinMax(double &minx, double &maxx, double &smallestGreaterZero)
|
||||||
|
{
|
||||||
|
return getValuesMinMax(minx, maxx, smallestGreaterZero);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool JKQTPImpulsesHorizontalGraph::getYMinMax(double &miny, double &maxy, double &smallestGreaterZero)
|
||||||
|
{
|
||||||
|
return getPositionsMinMax(miny, maxy, smallestGreaterZero);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void JKQTPImpulsesHorizontalGraph::setKeyColumn(int __value)
|
||||||
|
{
|
||||||
|
setYColumn(__value);
|
||||||
|
}
|
||||||
|
|
||||||
|
void JKQTPImpulsesHorizontalGraph::setValueColumn(int __value)
|
||||||
|
{
|
||||||
|
setXColumn(__value);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -178,6 +294,17 @@ void JKQTPImpulsesVerticalGraph::drawKeyMarker(JKQTPEnhancedPainter& painter, QR
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool JKQTPImpulsesVerticalGraph::getXMinMax(double &minx, double &maxx, double &smallestGreaterZero)
|
||||||
|
{
|
||||||
|
return getPositionsMinMax(minx, maxx, smallestGreaterZero);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool JKQTPImpulsesVerticalGraph::getYMinMax(double &miny, double &maxy, double &smallestGreaterZero)
|
||||||
|
{
|
||||||
|
return getValuesMinMax(miny, maxy, smallestGreaterZero);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void JKQTPImpulsesVerticalGraph::draw(JKQTPEnhancedPainter& painter) {
|
void JKQTPImpulsesVerticalGraph::draw(JKQTPEnhancedPainter& painter) {
|
||||||
#ifdef JKQTBP_AUTOTIMER
|
#ifdef JKQTBP_AUTOTIMER
|
||||||
JKQTPAutoOutputTimer jkaaot("JKQTPImpulsesVerticalGraph::draw");
|
JKQTPAutoOutputTimer jkaaot("JKQTPImpulsesVerticalGraph::draw");
|
||||||
@ -259,6 +386,107 @@ bool JKQTPImpulsesHorizontalErrorGraph::usesColumn(int c) const
|
|||||||
return JKQTPImpulsesHorizontalGraph::usesColumn(c)|| JKQTPXGraphErrors::errorUsesColumn(c);
|
return JKQTPImpulsesHorizontalGraph::usesColumn(c)|| JKQTPXGraphErrors::errorUsesColumn(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool JKQTPImpulsesHorizontalErrorGraph::getXMinMax(double &minx, double &maxx, double &smallestGreaterZero)
|
||||||
|
{
|
||||||
|
if (xErrorColumn>=0 && xErrorStyle!=JKQTPNoError) {
|
||||||
|
minx=0;
|
||||||
|
maxx=0;
|
||||||
|
smallestGreaterZero=0;
|
||||||
|
if (getBaseline()>0) {
|
||||||
|
smallestGreaterZero=getBaseline();
|
||||||
|
minx=getBaseline();
|
||||||
|
maxx=getBaseline();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (parent==nullptr) return false;
|
||||||
|
|
||||||
|
JKQTPDatastore* datastore=parent->getDatastore();
|
||||||
|
int imax=0;
|
||||||
|
int imin=0;
|
||||||
|
if (getIndexRange(imin, imax)) {
|
||||||
|
|
||||||
|
|
||||||
|
for (int i=imin; i<imax; i++) {
|
||||||
|
double yv=getBaseline();
|
||||||
|
if (JKQTPIsOKFloat(yv)) {
|
||||||
|
if (yv>maxx) maxx=yv;
|
||||||
|
if (yv<minx) minx=yv;
|
||||||
|
double xvsgz;
|
||||||
|
xvsgz=yv; SmallestGreaterZeroCompare_xvsgz();
|
||||||
|
}
|
||||||
|
yv=datastore->get(static_cast<size_t>(xColumn),static_cast<size_t>(i))+datastore->get(static_cast<size_t>(xErrorColumn),static_cast<size_t>(i));
|
||||||
|
if (JKQTPIsOKFloat(yv)) {
|
||||||
|
if (yv>maxx) maxx=yv;
|
||||||
|
if (yv<minx) minx=yv;
|
||||||
|
double xvsgz;
|
||||||
|
xvsgz=yv; SmallestGreaterZeroCompare_xvsgz();
|
||||||
|
}
|
||||||
|
yv=datastore->get(static_cast<size_t>(xColumn),static_cast<size_t>(i))-datastore->get(static_cast<size_t>(xErrorColumn),static_cast<size_t>(i));
|
||||||
|
if (JKQTPIsOKFloat(yv)) {
|
||||||
|
if (yv>maxx) maxx=yv;
|
||||||
|
if (yv<minx) minx=yv;
|
||||||
|
double xvsgz;
|
||||||
|
xvsgz=yv; SmallestGreaterZeroCompare_xvsgz();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return JKQTPImpulsesHorizontalGraph::getXMinMax(minx,maxx,smallestGreaterZero);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
int JKQTPImpulsesHorizontalErrorGraph::getErrorColumn() const
|
||||||
|
{
|
||||||
|
return getXErrorColumn();
|
||||||
|
}
|
||||||
|
|
||||||
|
int JKQTPImpulsesHorizontalErrorGraph::getErrorColumnLower() const
|
||||||
|
{
|
||||||
|
return getXErrorColumnLower();
|
||||||
|
}
|
||||||
|
|
||||||
|
JKQTPErrorPlotstyle JKQTPImpulsesHorizontalErrorGraph::getErrorStyle() const
|
||||||
|
{
|
||||||
|
return getXErrorStyle();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool JKQTPImpulsesHorizontalErrorGraph::getErrorSymmetric() const
|
||||||
|
{
|
||||||
|
return getXErrorSymmetric();
|
||||||
|
}
|
||||||
|
|
||||||
|
void JKQTPImpulsesHorizontalErrorGraph::setErrorSymmetric(bool __value)
|
||||||
|
{
|
||||||
|
setXErrorSymmetric(__value);
|
||||||
|
}
|
||||||
|
|
||||||
|
void JKQTPImpulsesHorizontalErrorGraph::setErrorStyle(JKQTPErrorPlotstyle __value)
|
||||||
|
{
|
||||||
|
setXErrorStyle(__value);
|
||||||
|
}
|
||||||
|
|
||||||
|
void JKQTPImpulsesHorizontalErrorGraph::setErrorColumn(size_t column)
|
||||||
|
{
|
||||||
|
setXErrorColumn(column);
|
||||||
|
}
|
||||||
|
|
||||||
|
void JKQTPImpulsesHorizontalErrorGraph::setErrorColumn(int column)
|
||||||
|
{
|
||||||
|
setXErrorColumn(column);
|
||||||
|
}
|
||||||
|
|
||||||
|
void JKQTPImpulsesHorizontalErrorGraph::setErrorColumnLower(int column)
|
||||||
|
{
|
||||||
|
setXErrorColumnLower(column);
|
||||||
|
}
|
||||||
|
|
||||||
|
void JKQTPImpulsesHorizontalErrorGraph::setErrorColumnLower(size_t column)
|
||||||
|
{
|
||||||
|
setXErrorColumnLower(column);
|
||||||
|
}
|
||||||
|
|
||||||
void JKQTPImpulsesHorizontalErrorGraph::drawErrorsAfter(JKQTPEnhancedPainter &painter)
|
void JKQTPImpulsesHorizontalErrorGraph::drawErrorsAfter(JKQTPEnhancedPainter &painter)
|
||||||
{
|
{
|
||||||
if (sortData==JKQTPXYGraph::Unsorted) plotErrorIndicators(painter, parent, this, xColumn, yColumn);
|
if (sortData==JKQTPXYGraph::Unsorted) plotErrorIndicators(painter, parent, this, xColumn, yColumn);
|
||||||
@ -278,11 +506,120 @@ JKQTPImpulsesVerticalErrorGraph::JKQTPImpulsesVerticalErrorGraph(JKQTPlotter *pa
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int JKQTPImpulsesVerticalErrorGraph::getErrorColumn() const
|
||||||
|
{
|
||||||
|
return getYErrorColumn();
|
||||||
|
}
|
||||||
|
|
||||||
|
int JKQTPImpulsesVerticalErrorGraph::getErrorColumnLower() const
|
||||||
|
{
|
||||||
|
return getYErrorColumnLower();
|
||||||
|
}
|
||||||
|
|
||||||
|
JKQTPErrorPlotstyle JKQTPImpulsesVerticalErrorGraph::getErrorStyle() const
|
||||||
|
{
|
||||||
|
return getYErrorStyle();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool JKQTPImpulsesVerticalErrorGraph::getErrorSymmetric() const
|
||||||
|
{
|
||||||
|
return getYErrorSymmetric();
|
||||||
|
}
|
||||||
|
|
||||||
|
void JKQTPImpulsesVerticalErrorGraph::setErrorSymmetric(bool __value)
|
||||||
|
{
|
||||||
|
setYErrorSymmetric(__value);
|
||||||
|
}
|
||||||
|
|
||||||
|
void JKQTPImpulsesVerticalErrorGraph::setErrorStyle(JKQTPErrorPlotstyle __value)
|
||||||
|
{
|
||||||
|
setYErrorStyle(__value);
|
||||||
|
}
|
||||||
|
|
||||||
|
void JKQTPImpulsesVerticalErrorGraph::setErrorColumn(size_t column)
|
||||||
|
{
|
||||||
|
setYErrorColumn(column);
|
||||||
|
}
|
||||||
|
|
||||||
|
void JKQTPImpulsesVerticalErrorGraph::setErrorColumn(int column)
|
||||||
|
{
|
||||||
|
setYErrorColumn(column);
|
||||||
|
}
|
||||||
|
|
||||||
|
void JKQTPImpulsesVerticalErrorGraph::setErrorColumnLower(int column)
|
||||||
|
{
|
||||||
|
setYErrorColumnLower(column);
|
||||||
|
}
|
||||||
|
|
||||||
|
void JKQTPImpulsesVerticalErrorGraph::setErrorColumnLower(size_t column)
|
||||||
|
{
|
||||||
|
setYErrorColumnLower(column);
|
||||||
|
}
|
||||||
|
|
||||||
bool JKQTPImpulsesVerticalErrorGraph::usesColumn(int c) const
|
bool JKQTPImpulsesVerticalErrorGraph::usesColumn(int c) const
|
||||||
{
|
{
|
||||||
return JKQTPImpulsesVerticalGraph::usesColumn(c)|| JKQTPYGraphErrors::errorUsesColumn(c);
|
return JKQTPImpulsesVerticalGraph::usesColumn(c)|| JKQTPYGraphErrors::errorUsesColumn(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool JKQTPImpulsesVerticalErrorGraph::getYMinMax(double &miny, double &maxy, double &smallestGreaterZero)
|
||||||
|
{
|
||||||
|
if (yErrorColumn>=0 && yErrorStyle!=JKQTPNoError) {
|
||||||
|
miny=0;
|
||||||
|
maxy=0;
|
||||||
|
smallestGreaterZero=0;
|
||||||
|
if (getBaseline()>0) {
|
||||||
|
smallestGreaterZero=getBaseline();
|
||||||
|
miny=getBaseline();
|
||||||
|
maxy=getBaseline();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (parent==nullptr) return false;
|
||||||
|
|
||||||
|
JKQTPDatastore* datastore=parent->getDatastore();
|
||||||
|
int imax=0;
|
||||||
|
int imin=0;
|
||||||
|
if (getIndexRange(imin, imax)) {
|
||||||
|
|
||||||
|
|
||||||
|
for (int i=imin; i<imax; i++) {
|
||||||
|
double yv=getBaseline();
|
||||||
|
if (JKQTPIsOKFloat(yv)) {
|
||||||
|
if (yv>maxy) maxy=yv;
|
||||||
|
if (yv<miny) miny=yv;
|
||||||
|
double xvsgz;
|
||||||
|
xvsgz=yv; SmallestGreaterZeroCompare_xvsgz();
|
||||||
|
}
|
||||||
|
yv=datastore->get(static_cast<size_t>(yColumn),static_cast<size_t>(i));
|
||||||
|
if (JKQTPIsOKFloat(yv)) {
|
||||||
|
if (yv>maxy) maxy=yv;
|
||||||
|
if (yv<miny) miny=yv;
|
||||||
|
double xvsgz;
|
||||||
|
xvsgz=yv; SmallestGreaterZeroCompare_xvsgz();
|
||||||
|
}
|
||||||
|
yv=datastore->get(static_cast<size_t>(yColumn),static_cast<size_t>(i))+datastore->get(static_cast<size_t>(yErrorColumn),static_cast<size_t>(i));
|
||||||
|
if (JKQTPIsOKFloat(yv)) {
|
||||||
|
if (yv>maxy) maxy=yv;
|
||||||
|
if (yv<miny) miny=yv;
|
||||||
|
double xvsgz;
|
||||||
|
xvsgz=yv; SmallestGreaterZeroCompare_xvsgz();
|
||||||
|
}
|
||||||
|
yv=datastore->get(static_cast<size_t>(yColumn),static_cast<size_t>(i))-datastore->get(static_cast<size_t>(yErrorColumn),static_cast<size_t>(i));
|
||||||
|
if (JKQTPIsOKFloat(yv)) {
|
||||||
|
if (yv>maxy) maxy=yv;
|
||||||
|
if (yv<miny) miny=yv;
|
||||||
|
double xvsgz;
|
||||||
|
xvsgz=yv; SmallestGreaterZeroCompare_xvsgz();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return JKQTPImpulsesVerticalGraph::getYMinMax(miny,maxy,smallestGreaterZero);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void JKQTPImpulsesVerticalErrorGraph::drawErrorsAfter(JKQTPEnhancedPainter &painter)
|
void JKQTPImpulsesVerticalErrorGraph::drawErrorsAfter(JKQTPEnhancedPainter &painter)
|
||||||
{
|
{
|
||||||
if (sortData==JKQTPXYGraph::Unsorted) plotErrorIndicators(painter, parent, this, xColumn, yColumn);
|
if (sortData==JKQTPXYGraph::Unsorted) plotErrorIndicators(painter, parent, this, xColumn, yColumn);
|
||||||
|
@ -30,6 +30,8 @@
|
|||||||
/** \brief This is a base class for all impulse graphs
|
/** \brief This is a base class for all impulse graphs
|
||||||
* \ingroup jkqtplotter_barssticks
|
* \ingroup jkqtplotter_barssticks
|
||||||
*
|
*
|
||||||
|
* \image html JKQTPImpulsesVerticalGraph.png
|
||||||
|
*
|
||||||
* \see JKQTPImpulsesHorizontalGraph, JKQTPImpulsesVerticalGraph
|
* \see JKQTPImpulsesHorizontalGraph, JKQTPImpulsesVerticalGraph
|
||||||
*/
|
*/
|
||||||
class JKQTPLOTTER_LIB_EXPORT JKQTPImpulsesGraphBase: public JKQTPXYBaselineGraph, public JKQTPGraphLineStyleMixin, public JKQTPGraphSymbolStyleMixin{
|
class JKQTPLOTTER_LIB_EXPORT JKQTPImpulsesGraphBase: public JKQTPXYBaselineGraph, public JKQTPGraphLineStyleMixin, public JKQTPGraphSymbolStyleMixin{
|
||||||
@ -58,13 +60,25 @@ protected:
|
|||||||
* \image html impulsesplot_symbols.png
|
* \image html impulsesplot_symbols.png
|
||||||
*/
|
*/
|
||||||
bool drawSymbols;
|
bool drawSymbols;
|
||||||
|
|
||||||
|
/** \brief get the maximum and minimum value in the impulse-elongation (i.e. value) direction of the graph
|
||||||
|
*
|
||||||
|
* The result is given in the two parameters which are call-by-reference parameters!
|
||||||
|
*/
|
||||||
|
bool getValuesMinMax(double& mmin, double& mmax, double& smallestGreaterZero) ;
|
||||||
|
/** \brief get the maximum and minimum value of the impulse positions of the graph
|
||||||
|
*
|
||||||
|
* The result is given in the two parameters which are call-by-reference parameters!
|
||||||
|
*/
|
||||||
|
bool getPositionsMinMax(double& mmin, double& mmax, double& smallestGreaterZero) ;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/** \brief This implements an impulse plot with impulses in direction of the X axis (i.e. from y=0 to y=f(x) )
|
/** \brief This implements an impulse plot with horizontal impulses in direction of the X axis (i.e. from x=0 to x=f(y) )
|
||||||
* \ingroup jkqtplotter_barssticks
|
* \ingroup jkqtplotter_barssticks
|
||||||
*
|
*
|
||||||
* \image html plot_impulsesxplots.png
|
* \image html JKQTPImpulsesHorizontalGraph.png
|
||||||
*
|
*
|
||||||
* \see JKQTPImpulsesVerticalGraph, \ref JKQTPlotterImpulsePlots
|
* \see JKQTPImpulsesVerticalGraph, \ref JKQTPlotterImpulsePlots
|
||||||
*/
|
*/
|
||||||
@ -80,16 +94,32 @@ public:
|
|||||||
virtual void draw(JKQTPEnhancedPainter& painter) override;
|
virtual void draw(JKQTPEnhancedPainter& painter) override;
|
||||||
/** \brief plots a key marker inside the specified rectangle \a rect */
|
/** \brief plots a key marker inside the specified rectangle \a rect */
|
||||||
virtual void drawKeyMarker(JKQTPEnhancedPainter& painter, QRectF& rect) override;
|
virtual void drawKeyMarker(JKQTPEnhancedPainter& painter, QRectF& rect) override;
|
||||||
|
/** \brief returns the column used as "key" for the current graph (typically this call getXColumn(), but for horizontal graphs like filled curves or barcharts it may call getYColumn() ) */
|
||||||
|
virtual int getKeyColumn() const override;
|
||||||
|
/** \brief returns the column used as "value" for the current graph (typically this call getXColumn(), but for horizontal graphs like filled curves or barcharts it may call getYColumn() ) */
|
||||||
|
virtual int getValueColumn() const override;
|
||||||
|
|
||||||
|
|
||||||
|
/** \copydoc JKQTPXYGraph::getXMinMax() */
|
||||||
|
virtual bool getXMinMax(double& minx, double& maxx, double& smallestGreaterZero) override;
|
||||||
|
/** \copydoc JKQTPXYGraph::getYMinMax() */
|
||||||
|
virtual bool getYMinMax(double& miny, double& maxy, double& smallestGreaterZero) override;
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
/** \brief sets the column used as "key" for the current graph (typically this call setXColumn(), but for horizontal graphs like filled curves or barcharts it may call setYColumn() ) */
|
||||||
|
virtual void setKeyColumn(int __value) override;
|
||||||
|
/** \brief sets the column used as "value" for the current graph (typically this call setXColumn(), but for horizontal graphs like filled curves or barcharts it may call setYColumn() ) */
|
||||||
|
virtual void setValueColumn(int __value) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** \brief This implements an impulse plot with impulses in direction of the X axis (i.e. from x=0 to x=f(y) )
|
/** \brief This implements an impulse plot with horizontal impulses in direction of the X axis (i.e. from x=0 to x=f(y) )
|
||||||
* \ingroup jkqtplotter_barssticks
|
* \ingroup jkqtplotter_barssticks
|
||||||
*
|
*
|
||||||
* \image html plot_impulsesxerrorsplots.png
|
* \image html JKQTPImpulsesHorizontalErrorGraph.png
|
||||||
*
|
*
|
||||||
* \see jkqtpstatAddXErrorImpulsesGraph(), JKQTPImpulsesHorizontalGraph, \ref JKQTPlotterImpulsePlots
|
* \see jkqtpstatAddXErrorImpulsesGraph(), JKQTPImpulsesHorizontalGraph, \ref JKQTPlotterImpulsePlots
|
||||||
*/
|
*/
|
||||||
@ -102,6 +132,33 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPImpulsesHorizontalErrorGraph: public JKQTPImpu
|
|||||||
/** \copydoc JKQTPGraph::usesColumn() */
|
/** \copydoc JKQTPGraph::usesColumn() */
|
||||||
virtual bool usesColumn(int c) const override;
|
virtual bool usesColumn(int c) const override;
|
||||||
|
|
||||||
|
/** \copydoc JKQTPXYGraph::getXMinMax() */
|
||||||
|
virtual bool getXMinMax(double& minx, double& maxx, double& smallestGreaterZero) override;
|
||||||
|
|
||||||
|
/** \brief returns the column that contains the bar height errors */
|
||||||
|
int getErrorColumn() const;
|
||||||
|
/** \brief returns the column that contains the lower bar height errors */
|
||||||
|
int getErrorColumnLower() const;
|
||||||
|
/** \brief returns the error style of the bar */
|
||||||
|
JKQTPErrorPlotstyle getErrorStyle() const;
|
||||||
|
/** \brief returns whether the errors of the bars are symmetric */
|
||||||
|
bool getErrorSymmetric() const;
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
/** \brief sets whether the errors of the bars are symmetric */
|
||||||
|
void setErrorSymmetric(bool __value);
|
||||||
|
/** \brief sets the error style of the bar */
|
||||||
|
void setErrorStyle(JKQTPErrorPlotstyle __value);
|
||||||
|
/** \brief sets the column that contains the bar height errors */
|
||||||
|
void setErrorColumn(int column) ;
|
||||||
|
|
||||||
|
/** \brief sets the column that contains the bar height errors */
|
||||||
|
void setErrorColumn(size_t column) ;
|
||||||
|
/** \brief sets the column that contains the bar height errors */
|
||||||
|
void setErrorColumnLower(int column) ;
|
||||||
|
|
||||||
|
/** \brief sets the column that contains the bar height errors */
|
||||||
|
void setErrorColumnLower(size_t column) ;
|
||||||
protected:
|
protected:
|
||||||
/** \brief this function is used to plot error inidcators before plotting the graphs. */
|
/** \brief this function is used to plot error inidcators before plotting the graphs. */
|
||||||
virtual void drawErrorsAfter(JKQTPEnhancedPainter& painter) override ;
|
virtual void drawErrorsAfter(JKQTPEnhancedPainter& painter) override ;
|
||||||
@ -114,9 +171,10 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPImpulsesHorizontalErrorGraph: public JKQTPImpu
|
|||||||
/*! \brief This implements an impulse plot with impulses in direction of the Y axis (i.e. from y=0 to y=f(x) )
|
/*! \brief This implements an impulse plot with impulses in direction of the Y axis (i.e. from y=0 to y=f(x) )
|
||||||
\ingroup jkqtplotter_barssticks
|
\ingroup jkqtplotter_barssticks
|
||||||
|
|
||||||
\image html plot_impulsesyplots.png
|
\image html JKQTPImpulsesVerticalGraph.png
|
||||||
|
\image html JKQTPImpulsesVerticalGraph_Symbols.png "generated by setting setDrawSymbols(true)"
|
||||||
|
|
||||||
\see \ref JKQTPlotterImpulsePlots
|
\see JKQTPImpulsesGraphBase, JKQTPImpulsesVerticalErrorGraph, \ref JKQTPlotterImpulsePlots
|
||||||
*/
|
*/
|
||||||
class JKQTPLOTTER_LIB_EXPORT JKQTPImpulsesVerticalGraph: public JKQTPImpulsesGraphBase {
|
class JKQTPLOTTER_LIB_EXPORT JKQTPImpulsesVerticalGraph: public JKQTPImpulsesGraphBase {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@ -130,6 +188,10 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPImpulsesVerticalGraph: public JKQTPImpulsesGra
|
|||||||
virtual void draw(JKQTPEnhancedPainter& painter) override;
|
virtual void draw(JKQTPEnhancedPainter& painter) override;
|
||||||
/** \brief plots a key marker inside the specified rectangle \a rect */
|
/** \brief plots a key marker inside the specified rectangle \a rect */
|
||||||
virtual void drawKeyMarker(JKQTPEnhancedPainter& painter, QRectF& rect) override;
|
virtual void drawKeyMarker(JKQTPEnhancedPainter& painter, QRectF& rect) override;
|
||||||
|
/** \copydoc JKQTPXYGraph::getXMinMax() */
|
||||||
|
virtual bool getXMinMax(double& minx, double& maxx, double& smallestGreaterZero) override;
|
||||||
|
/** \copydoc JKQTPXYGraph::getYMinMax() */
|
||||||
|
virtual bool getYMinMax(double& miny, double& maxy, double& smallestGreaterZero) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -137,7 +199,7 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPImpulsesVerticalGraph: public JKQTPImpulsesGra
|
|||||||
/*! \brief This implements an impulse plot with impulses in direction of the X axis (i.e. from x=0 to x=f(y) )
|
/*! \brief This implements an impulse plot with impulses in direction of the X axis (i.e. from x=0 to x=f(y) )
|
||||||
\ingroup jkqtplotter_barssticks
|
\ingroup jkqtplotter_barssticks
|
||||||
|
|
||||||
\image html plot_impulsesyerrorsplots.png
|
\image html JKQTPImpulsesVerticalErrorGraph.png
|
||||||
|
|
||||||
\see JKQTPImpulsesVerticalGraph, jkqtpstatAddYErrorImpulsesGraph(), \ref JKQTPlotterImpulsePlots
|
\see JKQTPImpulsesVerticalGraph, jkqtpstatAddYErrorImpulsesGraph(), \ref JKQTPlotterImpulsePlots
|
||||||
*/
|
*/
|
||||||
@ -150,7 +212,33 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPImpulsesVerticalErrorGraph: public JKQTPImpuls
|
|||||||
JKQTPImpulsesVerticalErrorGraph(JKQTPlotter* parent);
|
JKQTPImpulsesVerticalErrorGraph(JKQTPlotter* parent);
|
||||||
/** \copydoc JKQTPGraph::usesColumn() */
|
/** \copydoc JKQTPGraph::usesColumn() */
|
||||||
virtual bool usesColumn(int c) const override;
|
virtual bool usesColumn(int c) const override;
|
||||||
|
/** \copydoc JKQTPXYGraph::getYMinMax() */
|
||||||
|
virtual bool getYMinMax(double& miny, double& maxy, double& smallestGreaterZero) override;
|
||||||
|
|
||||||
|
/** \brief returns the column that contains the bar height errors */
|
||||||
|
int getErrorColumn() const;
|
||||||
|
/** \brief returns the column that contains the lower bar height errors */
|
||||||
|
int getErrorColumnLower() const;
|
||||||
|
/** \brief returns the error style of the bar */
|
||||||
|
JKQTPErrorPlotstyle getErrorStyle() const;
|
||||||
|
/** \brief returns whether the errors of the bars are symmetric */
|
||||||
|
bool getErrorSymmetric() const;
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
/** \brief sets whether the errors of the bars are symmetric */
|
||||||
|
void setErrorSymmetric(bool __value);
|
||||||
|
/** \brief sets the error style of the bar */
|
||||||
|
void setErrorStyle(JKQTPErrorPlotstyle __value);
|
||||||
|
/** \brief sets the column that contains the bar height errors */
|
||||||
|
void setErrorColumn(int column) ;
|
||||||
|
|
||||||
|
/** \brief sets the column that contains the bar height errors */
|
||||||
|
void setErrorColumn(size_t column) ;
|
||||||
|
/** \brief sets the column that contains the bar height errors */
|
||||||
|
void setErrorColumnLower(int column) ;
|
||||||
|
|
||||||
|
/** \brief sets the column that contains the bar height errors */
|
||||||
|
void setErrorColumnLower(size_t column);
|
||||||
protected:
|
protected:
|
||||||
/** \brief this function is used to plot error inidcators before plotting the graphs. */
|
/** \brief this function is used to plot error inidcators before plotting the graphs. */
|
||||||
virtual void drawErrorsAfter(JKQTPEnhancedPainter& painter) override ;
|
virtual void drawErrorsAfter(JKQTPEnhancedPainter& painter) override ;
|
||||||
|
@ -103,9 +103,9 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPXYLineGraph: public JKQTPXYGraph, public JKQTP
|
|||||||
/*! \brief This implements xy line plots with x and y error indicators.
|
/*! \brief This implements xy line plots with x and y error indicators.
|
||||||
\ingroup jkqtplotter_linesymbolgraphs_simple
|
\ingroup jkqtplotter_linesymbolgraphs_simple
|
||||||
|
|
||||||
\image html plot_errorbarlineplots.png
|
\image html JKQTPXYLineErrorGraph_JKQTPErrorBars.png "setYErrorStyle(JKQTPErrorBars)"
|
||||||
\image html plot_errorlinelineplots.png
|
\image html JKQTPXYLineErrorGraph_JKQTPErrorLines.png "setYErrorStyle(JKQTPErrorLines)"
|
||||||
\image html plot_errorpolygonlineplots.png
|
\image html JKQTPXYLineErrorGraph_JKQTPErrorPolygons.png "setYErrorStyle(JKQTPErrorPolygins;"
|
||||||
|
|
||||||
\see jkqtpstatAddXYErrorLineGraph(), jkqtpstatAddXErrorLineGraph(), jkqtpstatAddYErrorLineGraph(), \ref JKQTPlotterErrorBarStyles, \ref JKQTPlotterBasicJKQTPDatastoreStatisticsGroupedStat
|
\see jkqtpstatAddXYErrorLineGraph(), jkqtpstatAddXErrorLineGraph(), jkqtpstatAddYErrorLineGraph(), \ref JKQTPlotterErrorBarStyles, \ref JKQTPlotterBasicJKQTPDatastoreStatisticsGroupedStat
|
||||||
*/
|
*/
|
||||||
|
@ -1015,6 +1015,7 @@ JKQTBasePlotter::JKQTPPen JKQTBasePlotter::getPlotStyle(int i, JKQTPPlotStyleTyp
|
|||||||
Qt::BrushStyle basebrushStyle=plotterStyle.graphsStyle.defaultGraphFillStyles[brushI];
|
Qt::BrushStyle basebrushStyle=plotterStyle.graphsStyle.defaultGraphFillStyles[brushI];
|
||||||
JKQTPGraphSymbols baseSymbol=plotterStyle.graphsStyle.defaultGraphSymbols[symbolI];
|
JKQTPGraphSymbols baseSymbol=plotterStyle.graphsStyle.defaultGraphSymbols[symbolI];
|
||||||
QColor baseColor=plotterStyle.graphsStyle.defaultGraphColors[colorI];
|
QColor baseColor=plotterStyle.graphsStyle.defaultGraphColors[colorI];
|
||||||
|
double baseWidth=baseProps.defaultLineWidth;
|
||||||
if (type==JKQTPPlotStyleType::Annotation || type==JKQTPPlotStyleType::Geometric) {
|
if (type==JKQTPPlotStyleType::Annotation || type==JKQTPPlotStyleType::Geometric) {
|
||||||
baseColor=plotterStyle.graphsStyle.annotationStyle.defaultColor;
|
baseColor=plotterStyle.graphsStyle.annotationStyle.defaultColor;
|
||||||
basePenStyle=plotterStyle.graphsStyle.annotationStyle.defaultLineStyle;
|
basePenStyle=plotterStyle.graphsStyle.annotationStyle.defaultLineStyle;
|
||||||
@ -1024,9 +1025,14 @@ JKQTBasePlotter::JKQTPPen JKQTBasePlotter::getPlotStyle(int i, JKQTPPlotStyleTyp
|
|||||||
if (type==JKQTPPlotStyleType::Barchart || type==JKQTPPlotStyleType::Boxplot || type==JKQTPPlotStyleType::Impulses) {
|
if (type==JKQTPPlotStyleType::Barchart || type==JKQTPPlotStyleType::Boxplot || type==JKQTPPlotStyleType::Impulses) {
|
||||||
basePenStyle=Qt::SolidLine;
|
basePenStyle=Qt::SolidLine;
|
||||||
}
|
}
|
||||||
|
if (type==JKQTPPlotStyleType::Barchart) {
|
||||||
|
basebrushStyle=Qt::SolidPattern;
|
||||||
|
}
|
||||||
if (type==JKQTPPlotStyleType::Boxplot) {
|
if (type==JKQTPPlotStyleType::Boxplot) {
|
||||||
basebrushStyle=Qt::SolidPattern;
|
basebrushStyle=Qt::SolidPattern;
|
||||||
}
|
}
|
||||||
|
if (type==JKQTPPlotStyleType::Impulses) {
|
||||||
|
}
|
||||||
const QColor lineColor=JKQTPGetDerivedColor(baseProps.graphColorDerivationMode, baseColor);
|
const QColor lineColor=JKQTPGetDerivedColor(baseProps.graphColorDerivationMode, baseColor);
|
||||||
const QColor errorColor=JKQTPGetDerivedColor(baseProps.errorColorDerivationMode, baseColor);
|
const QColor errorColor=JKQTPGetDerivedColor(baseProps.errorColorDerivationMode, baseColor);
|
||||||
|
|
||||||
@ -1035,7 +1041,7 @@ JKQTBasePlotter::JKQTPPen JKQTBasePlotter::getPlotStyle(int i, JKQTPPlotStyleTyp
|
|||||||
p.setSymbolType(baseSymbol);
|
p.setSymbolType(baseSymbol);
|
||||||
p.setFillStyle(basebrushStyle);
|
p.setFillStyle(basebrushStyle);
|
||||||
p.setErrorFillStyle(Qt::SolidPattern);
|
p.setErrorFillStyle(Qt::SolidPattern);
|
||||||
p.setWidthF(qMax(JKQTPlotterDrawingTools::ABS_MIN_LINEWIDTH, baseProps.defaultLineWidth));
|
p.setWidthF(qMax(JKQTPlotterDrawingTools::ABS_MIN_LINEWIDTH, baseWidth));
|
||||||
p.setFillColor(JKQTPGetDerivedColor(baseProps.fillColorDerivationMode, baseColor));
|
p.setFillColor(JKQTPGetDerivedColor(baseProps.fillColorDerivationMode, baseColor));
|
||||||
p.setErrorLineColor(errorColor);
|
p.setErrorLineColor(errorColor);
|
||||||
p.setErrorFillColor(JKQTPGetDerivedColor(baseProps.errorFillColorDerivationMode, baseColor));
|
p.setErrorFillColor(JKQTPGetDerivedColor(baseProps.errorFillColorDerivationMode, baseColor));
|
||||||
|
@ -104,7 +104,7 @@ class JKQTPLOTTER_LIB_EXPORT JKQTGraphsSpecificStyleProperties {
|
|||||||
JKQTPColorDerivationMode errorFillColorDerivationMode;
|
JKQTPColorDerivationMode errorFillColorDerivationMode;
|
||||||
/** \brief defines how to derive a symbol fill color for a new graph */
|
/** \brief defines how to derive a symbol fill color for a new graph */
|
||||||
JKQTPColorDerivationMode symbolFillColorDerivationMode;
|
JKQTPColorDerivationMode symbolFillColorDerivationMode;
|
||||||
protected:
|
private:
|
||||||
/** \brief modifies some of the settings to match the defaults for the given JKQTPPlotStyleType (e.g. sets line-width for impulses ...) */
|
/** \brief modifies some of the settings to match the defaults for the given JKQTPPlotStyleType (e.g. sets line-width for impulses ...) */
|
||||||
void modifyForDefaultStyle(JKQTPPlotStyleType type);
|
void modifyForDefaultStyle(JKQTPPlotStyleType type);
|
||||||
};
|
};
|
||||||
|
Before Width: | Height: | Size: 178 KiB After Width: | Height: | Size: 96 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 6.9 KiB |
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 7.4 KiB |
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 15 KiB |
BIN
screenshots/errorbarstyles_impulses_horizontal.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
screenshots/errorbarstyles_impulses_horizontal_small.png
Normal file
After Width: | Height: | Size: 7.3 KiB |
BIN
screenshots/errorbarstyles_impulses_small.png
Normal file
After Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 9.6 KiB After Width: | Height: | Size: 9.6 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 13 KiB |
BIN
screenshots/impulsesplot_horizontal_small.png
Normal file
After Width: | Height: | Size: 6.9 KiB |
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 4.4 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 30 KiB |
BIN
screenshots/impulsesplot_symbols_small.png
Normal file
After Width: | Height: | Size: 7.1 KiB |
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 5.9 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 8.1 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 9.5 KiB |