JKQTPlotter:

- FIXED plot-size calculation for filled graphs
  - added example for filled graphs with error indicators
This commit is contained in:
jkriege2 2022-09-11 00:06:47 +02:00
parent 6cc08c2041
commit 1fb0c540d9
19 changed files with 441 additions and 3 deletions

View File

@ -126,6 +126,7 @@ if(JKQtPlotter_BUILD_EXAMPLES)
simpletest
barchart/barchart,barchart_hor
barchart_twocolor/barchart_twocolor,barchart_twocolor_hor
barchart_errorbars/barchart_errorbars,barchart_errorbars_hor
wiggleplots/wiggleplot_x,wiggleplot_y
advplotstyling/advancedlineandfillstyling
boxplot
@ -136,6 +137,7 @@ if(JKQtPlotter_BUILD_EXAMPLES)
distributionplot/test_distributionplot
evalcurve
filledgraphs/filledgraphs,filledgraphs_y
filledgraphs_errors/filledgraphs_errors,filledgraphs_errors_y
functionplot/functionplot,functionplot_fy
styledboxplot/test_styledboxplot
multiplot/multiplot,multiplot_controlwindow
@ -174,9 +176,11 @@ if(JKQtPlotter_BUILD_EXAMPLES)
simpletest/JKQTPXYLineGraph/--smallscreenshotplot
barchart/JKQTPBarVerticalGraph,JKQTPBarHorizontalGraph/--smallscreenshotplot
barchart_twocolor/JKQTPBarVerticalGraphTwoColorFilling,JKQTPBarHorizontalGraphTwoColorFilling/--smallscreenshotplot
barchart_errorbars/JKQTPBarVerticalErrorGraph,JKQTPBarHorizontalErrorGraph/--smallscreenshotplot
wiggleplots/JKQTPFilledCurveXGraph_wiggle,JKQTPFilledCurveYGraph_wiggle
contourplot/JKQTPColumnContourPlot/--smallscreenshotplot
filledgraphs/JKQTPFilledCurveXGraph,JKQTPFilledCurveYGraph/--smallscreenshotplot
filledgraphs_errors/JKQTPFilledCurveXErrorGraph,JKQTPFilledCurveYErrorGraph/--smallscreenshotplot
evalcurve/JKQTPXYFunctionLineGraph/--smallscreenshotplot
)

View File

@ -339,7 +339,7 @@ This group assembles graphs that show their data with symbols and optionally wit
<td>\image html filledgraphs_small.png
<td> JKQTPFilledCurveXGraph, JKQTPFilledCurveYGraph
<tr>
<td>\image html plot_filledcurvexerrorplots_small.png
<td>\image html JKQTPFilledCurveXErrorGraph_small.png
<td> JKQTPFilledCurveXErrorGraph, JKQTPFilledCurveYErrorGraph
<tr>
<td>\image html JKQTPfilledVerticalRangeGraph_WithLines_small.png

View File

@ -25,6 +25,7 @@ Changes, compared to \ref page_whatsnew_V4_0_0 "v4.0.0" include:
<li>FIXED issue <a href="https://github.com/jkriege2/JKQtPlotter/pull/80">#80: Bug with multiple inheritance with Q_GDAGET with CLANG</a>, thanks to <a href="https://github.com/igormironchik">user:igormironchik</a>, caused by <a href="https://bugreports.qt.io/browse/QTBUG-104874">QTBUG-104874</a></li>
<li>FIXED: styling was not properly applied to coordinate axes of colorbars outside the plot</li>
<li>FIXED issue <a href="https://github.com/jkriege2/JKQtPlotter/pull/73">#73: Symbol thickness differs in actual plot and legend</a>, thanks to <a href="https://github.com/sim186">user:sim186</a></li>
<li>FIXED plot-size calculation for filled graphs</li>
<li>REORGANIZED: separated line-graphs from jkqtpscatter.h/.cpp into jkqtplines.h/.cpp</li>
<li>IMPROVED: QT6-compatibility by removing deprecated warnings</li>
<li>NEW: JKQTPFilledCurveXGraph and JKQTPFilledCurveYGraph can now plot wiggle plots with different fill styles above and below the baseline (feature request <a href="https://github.com/jkriege2/JKQtPlotter/issues/68">#68 Wiggle Plots</a> from <a href="https://github.com/xichaoqiang">user:xichaoqiang</a> </li>

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

View File

@ -0,0 +1,34 @@
cmake_minimum_required(VERSION 3.16)
set(EXAMPLE_NAME filledgraphs_errors)
set(EXENAME jkqtptest_${EXAMPLE_NAME})
message( STATUS ".. Building Example ${EXAMPLE_NAME}" )
# Set up source files
set(SOURCES filledgraphs_errors.cpp )
set(HEADERS )
set(RESOURCES )
set(UIS )
add_executable(${EXENAME} WIN32 ${SOURCES} ${HEADERS} ${RESOURCES} ${UIS})
target_link_libraries(${EXENAME} JKQTPExampleToolsLib)
target_include_directories(${EXENAME} PRIVATE ../../lib)
if(JKQtPlotter_BUILD_STATIC_LIBS)
target_link_libraries(${EXENAME} JKQTPlotterLib)
elseif(JKQtPlotter_BUILD_SHARED_LIBS)
target_link_libraries(${EXENAME} JKQTPlotterSharedLib)
endif()
# precomiled headers to speed up compilation
if (JKQtPlotter_BUILD_WITH_PRECOMPILED_HEADERS)
target_precompile_headers(${EXENAME} REUSE_FROM jkqtptest_simpletest)
endif (JKQtPlotter_BUILD_WITH_PRECOMPILED_HEADERS)
# Installation
install(TARGETS ${EXENAME} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
#Installation of Qt DLLs on Windows
jkqtplotter_deployqt(${EXENAME})

View File

@ -0,0 +1,44 @@
# Example (JKQTPlotter): Filled Graphs with Error Indicators {#JKQTPlotterFilledGraphsErrorBars}
This project (see [`filledgraphs_errors`](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/filledgraphs_errors) shows how to draw filled graphs with different styles of error indicators.
The source code of the main application is (see [`filledgraphs_errors.cpp`](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/filledgraphs_errors/filledgraphs_errors.cpp):
```.cpp
// 1. create a plotter window and get a pointer to the internal datastore (for convenience)
JKQTPlotter plot;
JKQTPDatastore* ds=plot.getDatastore();
// 2. now we create two columns for key and value
size_t columnK=ds->addLinearColumn(10, 0, 2.0*JKQTPSTATISTICS_PI,"k");
size_t columnV=ds->addColumnCalculatedFromColumn(columnK, &cos, "v");
// 3. create graph in the plot, which plots the dataset:
JKQTPBarGraphBase* graph=new JKQTPBarVerticalGraph(&plot);
graph->setKeyColumn(columnK);
graph->setValueColumn(columnV);
// set TwoColor fill Mode
graph->setFillMode(JKQTPBarGraphBase::FillMode::TwoColorFilling);
graph->setFillColor(QColor("green"));
graph->fillStyleBelow().setFillColor(QColor("red"));
plot.addGraph(graph);
// 4 autoscale the plot so the graph is contained
plot.zoomToFit();
// 5. show plotter and make it a decent size
plot.setWindowTitle(title);
plot.show();
plot.resize(400,400);
```
The result looks like this:
![filledgraphs_errors](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/filledgraphs_errors.png)
In order to draw horizontal error bars, you have to use `JKQTPBarHorizontalGraph` instead of `JKQTPBarVerticalGraph`:
![filledgraphs_errors_hor](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/filledgraphs_errors_hor.png)

View File

@ -0,0 +1,87 @@
/** \example filledgraphs_errors.cpp
* Shows how to draw filled graphs with error indicators in a JKQTPlotter
*
* \ref JKQTPlotterFilledGraphsErrorBars
*/
#include "jkqtpexampleapplication.h"
#include <QApplication>
#include "jkqtplotter/jkqtplotter.h"
#include "jkqtplotter/graphs/jkqtpscatter.h"
#include "jkqtplotter/graphs/jkqtpfilledcurve.h"
#include "jkqtpexampleapplication.h"
#include "jkqtcommon/jkqtpmathtools.h"
template <class TCHART>
void doExample(JKQTPlotter& plot, const QString& title)
{
// 1. create a plotter window and get a pointer to the internal datastore (for convenience)
JKQTPDatastore* ds=plot.getDatastore();
// 2. now we create three columns for key and value
size_t columnK=ds->addLinearColumn(9, 0.1*JKQTPSTATISTICS_PI, 1.0*JKQTPSTATISTICS_PI,"k");
size_t columnK2=ds->addLinearColumn(9, 1.1*JKQTPSTATISTICS_PI, 2.0*JKQTPSTATISTICS_PI,"k2");
size_t columnK3=ds->addLinearColumn(9, 2.1*JKQTPSTATISTICS_PI, 3.0*JKQTPSTATISTICS_PI,"k2");
size_t columnV=ds->addColumnCalculatedFromColumn(columnK, &sin, "v");
size_t columnV2=ds->addColumnCalculatedFromColumn(columnK2, [](double x) { return -sin(x); }, "v2");
size_t columnV3=ds->addColumnCalculatedFromColumn(columnK3, &sin, "v3");
size_t columnE=ds->addColumnCalculatedFromColumn(columnV, [](double x) { return 0.2*x; }, "error");
size_t columnE2=ds->addColumnCalculatedFromColumn(columnV2, [](double x) { return 0.2*x; }, "error");
size_t columnE3=ds->addColumnCalculatedFromColumn(columnV3, [](double x) { return 0.2*x; }, "error");
// 3. create a graph in the plot, which plots the dataset with symmetric:
TCHART* graph1=new TCHART(&plot);
graph1->setKeyColumn(columnK);
graph1->setValueColumn(columnV);
graph1->setValueErrorColumn(columnE);
// set error indicator style
graph1->setValueErrorStyle(JKQTPErrorBars);
graph1->setTitle(QObject::tr("JKQTPErrorBars"));
plot.addGraph(graph1);
// 4. create a second graph in the plot, which plots the second dataset with outer error bars only:
TCHART* graph2=new TCHART(&plot);
graph2->setKeyColumn(columnK2);
graph2->setValueColumn(columnV2);
graph2->setValueErrorColumn(columnE2);
// set error indicator style
graph2->setValueErrorStyle(JKQTPErrorPolygons);
graph2->setTitle(QObject::tr("JKQTPErrorPolygons"));
plot.addGraph(graph2);
// 5. create a third graph in the plot, which plots the second dataset with outer error bars only:
TCHART* graph3=new TCHART(&plot);
graph3->setKeyColumn(columnK3);
graph3->setValueColumn(columnV3);
graph3->setValueErrorColumn(columnE3);
// set error indicator style
graph3->setValueErrorStyle(JKQTPErrorLines);
graph3->setTitle(QObject::tr("JKQTPErrorLines"));
plot.addGraph(graph3);
// 6 autoscale the plot so the graph is contained
plot.zoomToFit();
// 7. show plotter and make it a decent size
plot.getPlotter()->setKeyPosition(JKQTPKeyInsideBottomLeft);
plot.setWindowTitle(title);
plot.show();
plot.resize(400,400);
}
int main(int argc, char* argv[])
{
JKQTPAppSettingController highDPIController(argc,argv);
JKQTPExampleApplication app(argc, argv);
JKQTPlotter plotV, plotH;
doExample<JKQTPFilledCurveXErrorGraph>(plotV, "1: JKQTPFilledCurveXErrorGraph");
doExample<JKQTPFilledCurveYErrorGraph>(plotH, "2: JKQTPFilledCurveYErrorGraph");
return app.exec();
}

View File

@ -91,6 +91,7 @@ JKQTPFilledCurveGraphBase::FillMode JKQTPFilledCurveGraphBase::getFillMode() con
return m_fillMode;
}
void JKQTPFilledCurveGraphBase::setColor(QColor c)
{
setLineColor(c);
@ -222,6 +223,17 @@ void JKQTPFilledCurveXGraph::draw(JKQTPEnhancedPainter& painter) {
drawErrorsAfter(painter);
}
bool JKQTPFilledCurveXGraph::getYMinMax(double &miny, double &maxy, double &smallestGreaterZero)
{
bool res=JKQTPXYGraph::getYMinMax(miny, maxy, smallestGreaterZero);
if (getBaseline()>0 && getBaseline()<smallestGreaterZero) {
smallestGreaterZero=getBaseline();
}
miny=qMin(miny,getBaseline());
maxy=qMax(maxy,getBaseline());
return res;
}
JKQTPFilledCurveYGraph::JKQTPFilledCurveYGraph(JKQTBasePlotter* parent):
JKQTPFilledCurveGraphBase(parent)
{
@ -233,6 +245,17 @@ JKQTPFilledCurveYGraph::JKQTPFilledCurveYGraph(JKQTPlotter *parent):
}
bool JKQTPFilledCurveYGraph::getXMinMax(double &minx, double &maxx, double &smallestGreaterZero)
{
bool res=JKQTPXYGraph::getXMinMax(minx, maxx, smallestGreaterZero);
if (getBaseline()>0 && getBaseline()<smallestGreaterZero) {
smallestGreaterZero=getBaseline();
}
minx=qMin(minx,getBaseline());
maxx=qMax(maxx,getBaseline());
return res;
}
void JKQTPFilledCurveYGraph::draw(JKQTPEnhancedPainter &painter)
{
#ifdef JKQTBP_AUTOTIMER
@ -380,6 +403,83 @@ void JKQTPFilledCurveXErrorGraph::drawErrorsAfter(JKQTPEnhancedPainter &painter)
}
bool JKQTPFilledCurveXErrorGraph::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();
}
}
return true;
}
} else {
bool start=false;
miny=getBaseline();
maxy=getBaseline();
smallestGreaterZero=0;
if (getBaseline()>0) {
smallestGreaterZero=getBaseline();
miny=getBaseline();
maxy=getBaseline();
}
if (parent==nullptr) return false;
const JKQTPDatastore* datastore=parent->getDatastore();
int imax=0;
int imin=0;
if (getIndexRange(imin, imax)) {
for (int i=imin; i<imax; i++) {
const double yv=datastore->get(static_cast<size_t>(yColumn),static_cast<size_t>(i))+getYErrorU(i, datastore);
const double yvv=datastore->get(static_cast<size_t>(yColumn),static_cast<size_t>(i))-getYErrorL(i, datastore);
if (JKQTPIsOKFloat(yv) && JKQTPIsOKFloat(yvv) ) {
if (start || yv>maxy) maxy=yv;
if (start || yv<miny) miny=yv;
double xvsgz;
xvsgz=yv; SmallestGreaterZeroCompare_xvsgz();
if (start || yvv>maxy) maxy=yvv;
if (start || yvv<miny) miny=yvv;
xvsgz=yvv; SmallestGreaterZeroCompare_xvsgz();
start=false;
}
}
return !start;
}
}
return false;
}
JKQTPFilledCurveYErrorGraph::JKQTPFilledCurveYErrorGraph(JKQTBasePlotter *parent):
JKQTPFilledCurveYGraph(parent)
{
@ -399,6 +499,83 @@ bool JKQTPFilledCurveYErrorGraph::usesColumn(int c) const
return JKQTPFilledCurveYGraph::usesColumn(c)|| JKQTPXGraphErrors::errorUsesColumn(c);
}
bool JKQTPFilledCurveYErrorGraph::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));
if (JKQTPIsOKFloat(yv)) {
if (yv>maxx) maxx=yv;
if (yv<minx) minx=yv;
double xvsgz;
xvsgz=yv; SmallestGreaterZeroCompare_xvsgz();
}
}
return true;
}
} else {
bool start=false;
minx=getBaseline();
maxx=getBaseline();
smallestGreaterZero=0;
if (getBaseline()>0) {
smallestGreaterZero=getBaseline();
minx=getBaseline();
maxx=getBaseline();
}
if (parent==nullptr) return false;
const JKQTPDatastore* datastore=parent->getDatastore();
int imax=0;
int imin=0;
if (getIndexRange(imin, imax)) {
for (int i=imin; i<imax; i++) {
const double yv=datastore->get(static_cast<size_t>(xColumn),static_cast<size_t>(i))+getXErrorU(i, datastore);
const double yvv=datastore->get(static_cast<size_t>(xColumn),static_cast<size_t>(i))-getXErrorL(i, datastore);
if (JKQTPIsOKFloat(yv) && JKQTPIsOKFloat(yvv) ) {
if (start || yv>maxx) maxx=yv;
if (start || yv<minx) minx=yv;
double xvsgz;
xvsgz=yv; SmallestGreaterZeroCompare_xvsgz();
if (start || yvv>maxx) maxx=yvv;
if (start || yvv<minx) minx=yvv;
xvsgz=yvv; SmallestGreaterZeroCompare_xvsgz();
start=false;
}
}
return !start;
}
}
return false;
}
void JKQTPFilledCurveYErrorGraph::drawErrorsAfter(JKQTPEnhancedPainter &painter)
{
if (sortData==JKQTPXYGraph::Unsorted) plotErrorIndicators(painter, parent, this, xColumn, yColumn);

View File

@ -64,6 +64,7 @@ public:
const JKQTPGraphFillStyleMixin& fillStyleBelow() const;
/** \copydoc m_fillMode */
FillMode getFillMode() const;
public slots:
/** \brief set line-color, fill color and symbol color */
void setColor(QColor c);
@ -108,6 +109,13 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPFilledCurveXGraph: public JKQTPFilledCurveGrap
JKQTPFilledCurveXGraph(JKQTPlotter* parent);
/** \brief plots the graph to the plotter object specified as parent */
void draw(JKQTPEnhancedPainter &painter) override;
/** \brief get the maximum and minimum y-value of the graph
*
* The result is given in the two parameters which are call-by-reference parameters!
*/
virtual bool getYMinMax(double& miny, double& maxy, double& smallestGreaterZero) override;
};
@ -115,7 +123,7 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPFilledCurveXGraph: public JKQTPFilledCurveGrap
/*! \brief This implements filled curve plots with y errors where the area is filled between the plot line and the x-Axis.
\ingroup jkqtplotter_filledgraphs
\image html plot_filledcurvexerrorplots.png
\image html JKQTPFilledCurveXErrorGraph.png
\see \ref JKQTPlotterFilledGraphs, jkqtpstatAddXErrorFilledCurveGraph()
@ -129,7 +137,45 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPFilledCurveXErrorGraph: public JKQTPFilledCurv
JKQTPFilledCurveXErrorGraph(JKQTPlotter* parent);
/** \copydoc JKQTPGraph::usesColumn() */
virtual bool usesColumn(int c) const override;
/** \brief get the maximum and minimum y-value of the graph
*
* The result is given in the two parameters which are call-by-reference parameters!
*/
virtual bool getYMinMax(double& miny, double& maxy, double& smallestGreaterZero) override;
/** \copydoc JKQTPFilledCurveXGraph::yErrorSymmetric */
inline void setValueErrorSymmetric(bool __value) {
setYErrorSymmetric(__value);
}
/** \copydoc JKQTPFilledCurveXGraph::yErrorSymmetric */
inline bool getValueErrorSymmetric() const {
return getYErrorSymmetric();
}
/** \copydoc JKQTPFilledCurveXGraph::yErrorColumnLower */
inline int getValueErrorColumnLower() const {
return getYErrorColumnLower();
}
/** \copydoc JKQTPFilledCurveXGraph::yErrorColumn */
inline int getValueErrorColumn() const {
return getYErrorColumn();
}
/** \copydoc JKQTPFilledCurveXGraph::yErrorStyle */
inline void setValueErrorStyle(JKQTPErrorPlotstyle __value) {
setYErrorStyle(__value);
}
/** \copydoc JKQTPFilledCurveXGraph::yErrorStyle */
inline JKQTPErrorPlotstyle getValueErrorStyle() const {
return getYErrorStyle();
}
/** \copydoc JKQTPFilledCurveXGraph::yErrorColumn */
inline void setValueErrorColumn(int __value) {
setYErrorColumn(__value);
}
/** \copydoc JKQTPFilledCurveXGraph::yErrorColumnLower */
inline void setValueErrorColumnLower(int __value) {
setYErrorColumnLower(__value);
}
protected:
/** \brief this function is used to plot error inidcators before plotting the graphs. */
virtual void drawErrorsAfter(JKQTPEnhancedPainter& painter) override;
@ -169,6 +215,12 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPFilledCurveYGraph: public JKQTPFilledCurveGrap
/** \brief class constructor */
JKQTPFilledCurveYGraph(JKQTPlotter* parent);
/** \brief get the maximum and minimum x-value of the graph
*
* The result is given in the two parameters which are call-by-reference parameters!
*/
virtual bool getXMinMax(double& minx, double& maxx, double& smallestGreaterZero) override;
/** \brief plots the graph to the plotter object specified as parent */
void draw(JKQTPEnhancedPainter &painter) 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() ) */
@ -188,7 +240,7 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPFilledCurveYGraph: public JKQTPFilledCurveGrap
/*! \brief This implements filled curve plots with y errors where the area is filled between the plot line and the x-Axis.
\ingroup jkqtplotter_filledgraphs
\image html plot_filledcurveyerrorplots.png
\image html JKQTPFilledCurveYErrorGraph.png
\see \ref JKQTPlotterFilledGraphs, jkqtpstatAddYErrorFilledCurveGraph()
*/
@ -201,6 +253,45 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPFilledCurveYErrorGraph: public JKQTPFilledCurv
/** \copydoc JKQTPGraph::usesColumn() */
virtual bool usesColumn(int c) const override;
/** \brief get the maximum and minimum x-value of the graph
*
* The result is given in the two parameters which are call-by-reference parameters!
*/
virtual bool getXMinMax(double& minx, double& maxx, double& smallestGreaterZero) override;
/** \copydoc JKQTPFilledCurveXGraph::xErrorSymmetric */
inline void setValueErrorSymmetric(bool __value) {
setXErrorSymmetric(__value);
}
/** \copydoc JKQTPFilledCurveXGraph::xErrorSymmetric */
inline bool getValueErrorSymmetric() const {
return getXErrorSymmetric();
}
/** \copydoc JKQTPFilledCurveXGraph::xErrorColumnLower */
inline int getValueErrorColumnLower() const {
return getXErrorColumnLower();
}
/** \copydoc JKQTPFilledCurveXGraph::xErrorColumn */
inline int getValueErrorColumn() const {
return getXErrorColumn();
}
/** \copydoc JKQTPFilledCurveXGraph::xErrorStyle */
inline void setValueErrorStyle(JKQTPErrorPlotstyle __value) {
setXErrorStyle(__value);
}
/** \copydoc JKQTPFilledCurveXGraph::xErrorStyle */
inline JKQTPErrorPlotstyle getValueErrorStyle() const {
return getXErrorStyle();
}
/** \copydoc JKQTPFilledCurveXGraph::xErrorColumn */
inline void setValueErrorColumn(int __value) {
setXErrorColumn(__value);
}
/** \copydoc JKQTPFilledCurveXGraph::xErrorColumnLower */
inline void setValueErrorColumnLower(int __value) {
setXErrorColumnLower(__value);
}
protected:
/** \brief this function is used to plot error inidcators before plotting the graphs. */
virtual void drawErrorsAfter(JKQTPEnhancedPainter& painter) override;

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB