updated many documentation images to auto-generated ones
@ -72,10 +72,11 @@ if(JKQtPlotter_BUILD_EXAMPLES)
|
|||||||
# the output basename equals the example name in this list,
|
# the output basename equals the example name in this list,
|
||||||
# unless you specify the basenames by adding it/them after a slash '/'
|
# unless you specify the basenames by adding it/them after a slash '/'
|
||||||
# e.g. "barchart/barchart,barchart_hor"
|
# e.g. "barchart/barchart,barchart_hor"
|
||||||
|
# the basenames are applied to the windows in the order of their windowTitle()s!
|
||||||
set(JKQTPlotter_GenerateDocScreenshots_From
|
set(JKQTPlotter_GenerateDocScreenshots_From
|
||||||
scatter
|
scatter
|
||||||
simpletest
|
simpletest
|
||||||
barchart/barchart_hor,barchart
|
barchart/barchart,barchart_hor
|
||||||
wiggleplots/wiggleplot_x,wiggleplot_y
|
wiggleplots/wiggleplot_x,wiggleplot_y
|
||||||
advplotstyling/advancedlineandfillstyling
|
advplotstyling/advancedlineandfillstyling
|
||||||
boxplot
|
boxplot
|
||||||
@ -85,16 +86,65 @@ if(JKQtPlotter_BUILD_EXAMPLES)
|
|||||||
dateaxes/dateaxes,dateaxes_timeaxis
|
dateaxes/dateaxes,dateaxes_timeaxis
|
||||||
distributionplot/test_distributionplot
|
distributionplot/test_distributionplot
|
||||||
evalcurve
|
evalcurve
|
||||||
filledgraphs
|
filledgraphs/filledgraphs,filledgraphs_y
|
||||||
functionplot/functionplot,functionplot_fy
|
functionplot/functionplot,functionplot_fy
|
||||||
styledboxplot/test_styledboxplot
|
styledboxplot/test_styledboxplot
|
||||||
test_multiplot
|
multiplot/multiplot,multiplot_controlwindow
|
||||||
|
#symbols_and_styles
|
||||||
|
symbols_and_errors
|
||||||
|
stepplots
|
||||||
|
stackedbars/stackedbars,stackedbars_hor
|
||||||
|
#geo_arrows
|
||||||
|
#geo_simple
|
||||||
|
geometric
|
||||||
|
imageplot
|
||||||
|
imageplot_modifier
|
||||||
|
imageplot_nodatastore
|
||||||
|
imageplot_userpal/imageplot_userpal_program
|
||||||
|
impulsesplot
|
||||||
|
parametriccurve/parametriccurve1,parametriccurve2
|
||||||
|
paramscatterplot
|
||||||
|
#paramscatterplot_image
|
||||||
|
parsedfunctionplot
|
||||||
|
rgbimageplot
|
||||||
|
rgbimageplot_qt
|
||||||
|
mandelbrot
|
||||||
|
#speed
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# custom target that generates the images for the JKQTMathText documentation
|
||||||
|
set(JKQTPlotter_GenerateDocImage_DefaultOptions --screenshotdir="${CMAKE_CURRENT_LIST_DIR}/../doc/images/" --screenshotplot --disablehighdpi)
|
||||||
|
set(JKQTPlotter_GenerateDocImages_From
|
||||||
|
stackedbars/JKQTPbarVerticalGraphStacked,JKQTPbarHorizontalGraphStacked
|
||||||
|
scatter/JKQTPXYScatterGraph
|
||||||
|
simpletest/JKQTPXYLineGraph
|
||||||
|
barchart/JKQTPBarVerticalGraph,JKQTPBarHorizontalGraph
|
||||||
|
wiggleplots/JKQTPFilledCurveXGraph_wiggle,JKQTPFilledCurveYGraph_wiggle
|
||||||
|
contourplot/JKQTPColumnContourPlot
|
||||||
|
filledgraphs/JKQTPFilledCurveXGraph,JKQTPFilledCurveYGraph
|
||||||
|
evalcurve/JKQTPXYFunctionLineGraph
|
||||||
)
|
)
|
||||||
|
|
||||||
add_custom_target(JKQTPlotter_GenerateDocScreenshots
|
add_custom_target(JKQTPlotter_GenerateDocScreenshots
|
||||||
COMMENT "Building JKQTPlotter Documentation Screenshots ..."
|
COMMENT "Building JKQTPlotter Documentation Screenshots ..."
|
||||||
)
|
)
|
||||||
|
|
||||||
|
add_custom_target(JKQTPlotter_GenerateDocImages
|
||||||
|
COMMENT "Building JKQTPlotter Documentation Images ..."
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
foreach(ex ${JKQTPlotter_GenerateDocScreenshots_From})
|
foreach(ex ${JKQTPlotter_GenerateDocScreenshots_From})
|
||||||
string(REGEX MATCH "(.+)/(.+)" dummy ${ex})
|
string(REGEX MATCH "(.+)/(.+)" dummy ${ex})
|
||||||
if(CMAKE_MATCH_1 STREQUAL "" OR CMAKE_MATCH_2 STREQUAL "")
|
if(CMAKE_MATCH_1 STREQUAL "" OR CMAKE_MATCH_2 STREQUAL "")
|
||||||
@ -124,4 +174,35 @@ if(JKQtPlotter_BUILD_EXAMPLES)
|
|||||||
unset(basename)
|
unset(basename)
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
|
|
||||||
|
foreach(ex ${JKQTPlotter_GenerateDocImages_From})
|
||||||
|
string(REGEX MATCH "(.+)/(.+)" dummy ${ex})
|
||||||
|
if(CMAKE_MATCH_1 STREQUAL "" OR CMAKE_MATCH_2 STREQUAL "")
|
||||||
|
set(example ${ex})
|
||||||
|
set(basename ${ex})
|
||||||
|
else()
|
||||||
|
set(example ${CMAKE_MATCH_1})
|
||||||
|
set(basename ${CMAKE_MATCH_2})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(loc_target_name JKQTPlotter_GenerateDocImages_${example})
|
||||||
|
set(dep_name jkqtptest_${example})
|
||||||
|
string(TOUPPER ${example} example_upper)
|
||||||
|
add_custom_target(${loc_target_name}
|
||||||
|
COMMENT "Building JKQTPlotter Documentation Image: ${example_upper}"
|
||||||
|
COMMAND $<TARGET_FILE:${dep_name}> ${JKQTPlotter_GenerateDocImage_DefaultOptions} --screenshotbasename=${basename}
|
||||||
|
WORKING_DIRECTORY ${JKQtPlotter_QT_BINDIR}
|
||||||
|
DEPENDS ${dep_name}
|
||||||
|
)
|
||||||
|
|
||||||
|
add_dependencies(JKQTPlotter_GenerateDocImages ${loc_target_name})
|
||||||
|
|
||||||
|
unset(loc_target_name)
|
||||||
|
unset(dep_name)
|
||||||
|
unset(example)
|
||||||
|
unset(example_upper)
|
||||||
|
unset(basename)
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
@ -37,7 +37,7 @@ All test-projects are Qt-projects that use qmake to build. You can load them int
|
|||||||
<tr><td> \image html barchart_small.png
|
<tr><td> \image html barchart_small.png
|
||||||
<td> \subpage JKQTPlotterBarcharts
|
<td> \subpage JKQTPlotterBarcharts
|
||||||
<td> `JKQTPBarVerticalGraph` <br> C-style arrays of data
|
<td> `JKQTPBarVerticalGraph` <br> C-style arrays of data
|
||||||
<tr><td> \image html JKQTPBarHorizontalGraphStacked_small.png
|
<tr><td> \image html stackedbars_small.png
|
||||||
<td> \subpage JKQTPlotterStackedBarChart
|
<td> \subpage JKQTPlotterStackedBarChart
|
||||||
<td> `JKQTPBarVerticalStackableGraph`, `JKQTPBarHorizontalStackableGraph` <br> C++-style vectors of data
|
<td> `JKQTPBarVerticalStackableGraph`, `JKQTPBarHorizontalStackableGraph` <br> C++-style vectors of data
|
||||||
<tr><td> \image html filledgraphs_small.png
|
<tr><td> \image html filledgraphs_small.png
|
||||||
|
@ -520,7 +520,7 @@ Examples:
|
|||||||
<td>\image html overlayimageenhanced_small.png
|
<td>\image html overlayimageenhanced_small.png
|
||||||
<td> JKQTPOverlayImageEnhanced, JKQTPColumnOverlayImageEnhanced
|
<td> JKQTPOverlayImageEnhanced, JKQTPColumnOverlayImageEnhanced
|
||||||
<tr>
|
<tr>
|
||||||
<td>\image html JKQTPContour_small.png
|
<td>\image html JKQTPColumnContourPlot_small.png
|
||||||
<td> JKQTPContourPlot, JKQTPColumnContourPlot
|
<td> JKQTPContourPlot, JKQTPColumnContourPlot
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
@ -572,7 +572,7 @@ Examples:
|
|||||||
<th> Screenshot
|
<th> Screenshot
|
||||||
<th> Classes
|
<th> Classes
|
||||||
<tr>
|
<tr>
|
||||||
<td>\image html JKQTPContour_small.png
|
<td>\image html JKQTPColumnContourPlot_small.png
|
||||||
<td> JKQTPContourPlot, JKQTPColumnContourPlot
|
<td> JKQTPContourPlot, JKQTPColumnContourPlot
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
@ -38,6 +38,8 @@ Changes, compared to \ref page_whatsnew_V4_0_0 "v4.0.0" include:
|
|||||||
<li>NEW: added JKQTBasePlotter::grabPixelImage() and JKQTPlotter::grabPixelImage(), which grab the plotter into a QImage</li>
|
<li>NEW: added JKQTBasePlotter::grabPixelImage() and JKQTPlotter::grabPixelImage(), which grab the plotter into a QImage</li>
|
||||||
<li>NEW: added option to not display the preview dialog to JKQTBasePlotter::copyPixelImage() and JKQTPlotter::copyPixelImage()</li>
|
<li>NEW: added option to not display the preview dialog to JKQTBasePlotter::copyPixelImage() and JKQTPlotter::copyPixelImage()</li>
|
||||||
<li>NEW: added simple scatter plot JKQTPXYScatterGraph</li>
|
<li>NEW: added simple scatter plot JKQTPXYScatterGraph</li>
|
||||||
|
<li>NEW: made resize-timer status accessible from outside via JKQTPlotter::isResizeTimerRunning() </li>
|
||||||
|
<li>NEW: made it's delay a global static variable that can be set and red with JKQTPlotter::setGlobalResizeDelay() and JKQTPlotter::getGlobalResizeDelay()</li>
|
||||||
</ul></li>
|
</ul></li>
|
||||||
|
|
||||||
<li>JKQTMathText:<ul>
|
<li>JKQTMathText:<ul>
|
||||||
|
Before Width: | Height: | Size: 2.7 KiB |
BIN
doc/images/JKQTPBarHorizontalGraph.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
doc/images/JKQTPBarVerticalGraph.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
doc/images/JKQTPColumnContourPlot.png
Normal file
After Width: | Height: | Size: 92 KiB |
Before Width: | Height: | Size: 73 KiB |
Before Width: | Height: | Size: 26 KiB |
BIN
doc/images/JKQTPFilledCurveXGraph.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
doc/images/JKQTPFilledCurveXGraph_wiggle.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
doc/images/JKQTPFilledCurveYGraph.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
doc/images/JKQTPFilledCurveYGraph_wiggle.png
Normal file
After Width: | Height: | Size: 45 KiB |
BIN
doc/images/JKQTPViolinplotHorizontalElement.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
doc/images/JKQTPXYFunctionLineGraph.png
Normal file
After Width: | Height: | Size: 154 KiB |
BIN
doc/images/JKQTPXYLineGraph.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
doc/images/JKQTPXYScatterGraph.png
Normal file
After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 8.3 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 3.7 KiB |
@ -15,7 +15,7 @@ All test-projects are Qt-projects that use qmake to build. You can load them int
|
|||||||
| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/symbols_and_errors_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/symbols_and_errors) | [Simple Line/Symbol Graph With Errorbars](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/symbols_and_errors) | `JKQTPXYLineErrorGraph` <br> C-style arrays of data |
|
| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/symbols_and_errors_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/symbols_and_errors) | [Simple Line/Symbol Graph With Errorbars](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/symbols_and_errors) | `JKQTPXYLineErrorGraph` <br> C-style arrays of data |
|
||||||
| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/errorbarstyles_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/errorbarstyles) | [Different Types of Error Indicators](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/errorbarstyles) | `JKQTPXYLineErrorGraph` <br> different styles of error indicators for x- and y-errors <br> C++-style QVector for data <br> styling error indicators <br> moving key and formatting plotter grid |
|
| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/errorbarstyles_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/errorbarstyles) | [Different Types of Error Indicators](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/errorbarstyles) | `JKQTPXYLineErrorGraph` <br> different styles of error indicators for x- and y-errors <br> C++-style QVector for data <br> styling error indicators <br> moving key and formatting plotter grid |
|
||||||
| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/barchart_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/barchart) | [Simple Bar Charts](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/barchart) | `JKQTPBarVerticalGraph` <br> C-style arrays of data |
|
| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/barchart_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/barchart) | [Simple Bar Charts](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/barchart) | `JKQTPBarVerticalGraph` <br> C-style arrays of data |
|
||||||
| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/JKQTPbarHorizontalGraphStacked_small.png) <br> ![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/JKQTPbarVerticalGraphStacked_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/stackedbars) | [Stacked Bar Charts](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/stackedbars) | `JKQTPBarVerticalStackableGraph`, `JKQTPBarHorizontalStackableGraph` <br> C++-style vectors of data |
|
| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/stackedbars_small.png) <br> ![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/JKQTPbarVerticalGraphStacked_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/stackedbars) | [Stacked Bar Charts](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/stackedbars) | `JKQTPBarVerticalStackableGraph`, `JKQTPBarHorizontalStackableGraph` <br> C++-style vectors of data |
|
||||||
| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/filledgraphs_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/filledgraphs) | [Filled Curve Plots](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/filledgraphs) | `JKQTPFilledCurveXGraph`/`JKQTPFilledCurveYGraph` <br> setting/altering data in `JKQTPDatstore` directly <br> transparent plots <br> calculating histograms |
|
| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/filledgraphs_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/filledgraphs) | [Filled Curve Plots](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/filledgraphs) | `JKQTPFilledCurveXGraph`/`JKQTPFilledCurveYGraph` <br> setting/altering data in `JKQTPDatstore` directly <br> transparent plots <br> calculating histograms |
|
||||||
| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/wiggleplots_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/wiggleplots) | [Wiggle Plots](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/wiggleplots) | `JKQTPFilledCurveXGraph`/`JKQTPFilledCurveYGraph` <br> setting/altering data in `JKQTPDatstore` directly <br> data-dependent coloring <br> random-walks <br> seismographic data |
|
| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/wiggleplots_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/wiggleplots) | [Wiggle Plots](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/wiggleplots) | `JKQTPFilledCurveXGraph`/`JKQTPFilledCurveYGraph` <br> setting/altering data in `JKQTPDatstore` directly <br> data-dependent coloring <br> random-walks <br> seismographic data |
|
||||||
| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/impulsesplot_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/impulsesplot) | [Impulse Plots](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/impulsesplot) | `JKQTPImpulsesVerticalGraph` and `JKQTPImpulsesHorizontalGraph` <br> C++-style QVector as plot data |
|
| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/impulsesplot_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/impulsesplot) | [Impulse Plots](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/impulsesplot) | `JKQTPImpulsesVerticalGraph` and `JKQTPImpulsesHorizontalGraph` <br> C++-style QVector as plot data |
|
||||||
@ -89,7 +89,7 @@ All test-projects are Qt-projects that use qmake to build. You can load them int
|
|||||||
|
|
||||||
| Screenshot | Description | Notes |
|
| Screenshot | Description | Notes |
|
||||||
|:-------------:| ------------- | ------------- |
|
|:-------------:| ------------- | ------------- |
|
||||||
| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/test_multiplot_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/multiplot) | [Layouting Several Plots](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/multiplot) | Combining plots in Qt Layouts <br> linking plot axes <br> copy data from a `std::map` int the datastore <br> print plots/print preview |
|
| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/multiplot_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/multiplot) | [Layouting Several Plots](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/multiplot) | Combining plots in Qt Layouts <br> linking plot axes <br> copy data from a `std::map` int the datastore <br> print plots/print preview |
|
||||||
| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/test_distributionplot_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/distributionplot) | [Plotting a Statistical Distribution of Data](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/distributionplot) | Combines several different graphs to draw random values, their distribution and some statistical properties |
|
| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/test_distributionplot_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/distributionplot) | [Plotting a Statistical Distribution of Data](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/distributionplot) | Combines several different graphs to draw random values, their distribution and some statistical properties |
|
||||||
| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/mandelbrot_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/mandelbrot) | [Mandelbrot Set Explorer](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/mandelbrot) | Allows to zoom into the Mandelbrot Set, using the different Zooming methods of JKQTPlotter |
|
| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/mandelbrot_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/mandelbrot) | [Mandelbrot Set Explorer](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/mandelbrot) | Allows to zoom into the Mandelbrot Set, using the different Zooming methods of JKQTPlotter |
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
|
|
||||||
template <class TCHART>
|
template <class TCHART>
|
||||||
void doExample()
|
void doExample(const QString& title)
|
||||||
{
|
{
|
||||||
// 1. create a plotter window and get a pointer to the internal datastore (for convenience)
|
// 1. create a plotter window and get a pointer to the internal datastore (for convenience)
|
||||||
JKQTPlotter* plot=new JKQTPlotter();
|
JKQTPlotter* plot=new JKQTPlotter();
|
||||||
@ -98,6 +98,7 @@ void doExample()
|
|||||||
plot->zoomToFit();
|
plot->zoomToFit();
|
||||||
|
|
||||||
// show plotter and make it a decent size
|
// show plotter and make it a decent size
|
||||||
|
plot->setWindowTitle(title);
|
||||||
plot->show();
|
plot->show();
|
||||||
plot->resize(600,400);
|
plot->resize(600,400);
|
||||||
}
|
}
|
||||||
@ -109,8 +110,8 @@ int main(int argc, char* argv[])
|
|||||||
JKQTPExampleApplication app(argc, argv);
|
JKQTPExampleApplication app(argc, argv);
|
||||||
|
|
||||||
|
|
||||||
doExample<JKQTPBarVerticalGraph>();
|
doExample<JKQTPBarVerticalGraph>("1: JKQTPBarVerticalGraph");
|
||||||
doExample<JKQTPBarHorizontalGraph>();
|
doExample<JKQTPBarHorizontalGraph>("2: JKQTPBarHorizontalGraph");
|
||||||
|
|
||||||
return app.exec();
|
return app.exec();
|
||||||
}
|
}
|
||||||
|
@ -147,7 +147,7 @@ int main(int argc, char* argv[])
|
|||||||
|
|
||||||
// 8. show plotter and make it a decent size
|
// 8. show plotter and make it a decent size
|
||||||
plot.show();
|
plot.show();
|
||||||
plot.resize(600,600);
|
plot.resize(450,400);
|
||||||
plot.setWindowTitle("JKQTPColumnContourPlot");
|
plot.setWindowTitle("JKQTPColumnContourPlot");
|
||||||
|
|
||||||
|
|
||||||
|
@ -175,10 +175,12 @@ int main(int argc, char* argv[])
|
|||||||
|
|
||||||
JKQTPlotter plotDate;
|
JKQTPlotter plotDate;
|
||||||
drawWithDateAxis(plotDate);
|
drawWithDateAxis(plotDate);
|
||||||
|
plotDate.setWindowTitle("1: "+plotDate.windowTitle());
|
||||||
//plotDate.move(100,100);
|
//plotDate.move(100,100);
|
||||||
|
|
||||||
JKQTPlotter plotTime;
|
JKQTPlotter plotTime;
|
||||||
drawWithTimeAxis(plotTime);
|
drawWithTimeAxis(plotTime);
|
||||||
|
plotTime.setWindowTitle("2: "+plotTime.windowTitle());
|
||||||
//plotTime.move(100,550);
|
//plotTime.move(100,550);
|
||||||
|
|
||||||
return app.exec();
|
return app.exec();
|
||||||
|
@ -9,15 +9,8 @@
|
|||||||
#include "jkqtplotter/jkqtplotter.h"
|
#include "jkqtplotter/jkqtplotter.h"
|
||||||
#include "jkqtplotter/graphs/jkqtpfilledcurve.h"
|
#include "jkqtplotter/graphs/jkqtpfilledcurve.h"
|
||||||
|
|
||||||
int main(int argc, char* argv[])
|
template<class TGraph>
|
||||||
{
|
void drawGraph(JKQTPlotter& plot) {
|
||||||
|
|
||||||
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 4 datacolumns with length 256 entries in the datastore
|
// 2. now we create 4 datacolumns with length 256 entries in the datastore
|
||||||
@ -52,9 +45,9 @@ int main(int argc, char* argv[])
|
|||||||
|
|
||||||
|
|
||||||
// 4. now we add three semi-transparent, filled curve plots, one for each histogram
|
// 4. now we add three semi-transparent, filled curve plots, one for each histogram
|
||||||
JKQTPFilledCurveXGraph* graphR=new JKQTPFilledCurveXGraph(&plot);
|
TGraph* graphR=new TGraph(&plot);
|
||||||
JKQTPFilledCurveXGraph* graphG=new JKQTPFilledCurveXGraph(&plot);
|
TGraph* graphG=new TGraph(&plot);
|
||||||
JKQTPFilledCurveXGraph* graphB=new JKQTPFilledCurveXGraph(&plot);
|
TGraph* graphB=new TGraph(&plot);
|
||||||
|
|
||||||
// set graph titles
|
// set graph titles
|
||||||
graphR->setTitle("R-channel");
|
graphR->setTitle("R-channel");
|
||||||
@ -74,9 +67,15 @@ int main(int argc, char* argv[])
|
|||||||
graphB->setLineWidth(1);
|
graphB->setLineWidth(1);
|
||||||
|
|
||||||
// set data
|
// set data
|
||||||
graphR->setXColumn(columnX); graphR->setYColumn(columnR);
|
if (typeid(TGraph)==typeid(JKQTPFilledCurveXGraph)) {
|
||||||
graphG->setXColumn(columnX); graphG->setYColumn(columnG);
|
graphR->setXColumn(columnX); graphR->setYColumn(columnR);
|
||||||
graphB->setXColumn(columnX); graphB->setYColumn(columnB);
|
graphG->setXColumn(columnX); graphG->setYColumn(columnG);
|
||||||
|
graphB->setXColumn(columnX); graphB->setYColumn(columnB);
|
||||||
|
} else {
|
||||||
|
graphR->setYColumn(columnX); graphR->setXColumn(columnR);
|
||||||
|
graphG->setYColumn(columnX); graphG->setXColumn(columnG);
|
||||||
|
graphB->setYColumn(columnX); graphB->setXColumn(columnB);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// add the graphs to the plot, so they are actually displayed
|
// add the graphs to the plot, so they are actually displayed
|
||||||
@ -85,19 +84,48 @@ int main(int argc, char* argv[])
|
|||||||
plot.addGraph(graphR);
|
plot.addGraph(graphR);
|
||||||
|
|
||||||
// 5. set axis labels
|
// 5. set axis labels
|
||||||
plot.getXAxis()->setAxisLabel("R/G/B-value");
|
if (typeid(TGraph)==typeid(JKQTPFilledCurveXGraph)) {
|
||||||
plot.getYAxis()->setAxisLabel("normalized frequency [%]");
|
plot.getXAxis()->setAxisLabel("R/G/B-value");
|
||||||
|
plot.getYAxis()->setAxisLabel("normalized frequency [%]");
|
||||||
|
} else {
|
||||||
|
plot.getYAxis()->setAxisLabel("R/G/B-value");
|
||||||
|
plot.getXAxis()->setAxisLabel("normalized frequency [%]");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// 4. set the maximum size of the plot to 0..100% and 0..256
|
// 4. set the maximum size of the plot to 0..100% and 0..256
|
||||||
plot.setAbsoluteX(0,256);
|
if (typeid(TGraph)==typeid(JKQTPFilledCurveXGraph)) {
|
||||||
plot.setAbsoluteY(0,100);
|
plot.setAbsoluteX(0,256);
|
||||||
|
plot.setAbsoluteY(0,100);
|
||||||
|
} else {
|
||||||
|
plot.setAbsoluteY(0,256);
|
||||||
|
plot.setAbsoluteX(0,100);
|
||||||
|
}
|
||||||
// ... and scale plot automatically
|
// ... and scale plot automatically
|
||||||
plot.zoomToFit();
|
plot.zoomToFit();
|
||||||
|
|
||||||
// 5. show plotter and make it a decent size
|
// 5. show plotter and make it a decent size
|
||||||
|
plot.resize(400,300);
|
||||||
plot.show();
|
plot.show();
|
||||||
plot.resize(600,400);
|
}
|
||||||
|
|
||||||
|
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 plotX;
|
||||||
|
drawGraph<JKQTPFilledCurveXGraph>(plotX);
|
||||||
|
plotX.setWindowTitle("1: JKQTPFilledCurveXGraph");
|
||||||
|
|
||||||
|
JKQTPlotter plotY;
|
||||||
|
drawGraph<JKQTPFilledCurveYGraph>(plotY);
|
||||||
|
plotY.setWindowTitle("2: JKQTPFilledCurveYGraph");
|
||||||
|
plotY.resize(300,400);
|
||||||
|
|
||||||
|
|
||||||
return app.exec();
|
return app.exec();
|
||||||
}
|
}
|
||||||
|
@ -130,7 +130,7 @@ void drawExample(QApplication& app, const QString& name) {
|
|||||||
|
|
||||||
// show window and make it a decent size
|
// show window and make it a decent size
|
||||||
mainWin->show();
|
mainWin->show();
|
||||||
mainWin->resize(600,600);
|
mainWin->resize(500,500);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char* argv[])
|
int main(int argc, char* argv[])
|
||||||
@ -140,8 +140,8 @@ int main(int argc, char* argv[])
|
|||||||
JKQTPExampleApplication app(argc, argv);
|
JKQTPExampleApplication app(argc, argv);
|
||||||
|
|
||||||
|
|
||||||
drawExample<JKQTPXFunctionLineGraph>(app, "functionplot: JKQTPXFunctionLineGraph");
|
drawExample<JKQTPXFunctionLineGraph>(app, "1: functionplot: JKQTPXFunctionLineGraph");
|
||||||
drawExample<JKQTPYFunctionLineGraph>(app, "functionplot: JKQTPYFunctionLineGraph");
|
drawExample<JKQTPYFunctionLineGraph>(app, "2: functionplot: JKQTPYFunctionLineGraph");
|
||||||
|
|
||||||
|
|
||||||
return app.exec();
|
return app.exec();
|
||||||
|
@ -111,7 +111,7 @@ int main(int argc, char* argv[])
|
|||||||
|
|
||||||
// 4. show plotter and make it a decent size
|
// 4. show plotter and make it a decent size
|
||||||
plot.show();
|
plot.show();
|
||||||
plot.resize(1200,800);
|
plot.resize(1200/plot.devicePixelRatioF(),800/plot.devicePixelRatioF());
|
||||||
|
|
||||||
return app.exec();
|
return app.exec();
|
||||||
}
|
}
|
||||||
|
@ -207,7 +207,7 @@ int main(int argc, char* argv[])
|
|||||||
|
|
||||||
// 4. show plotter and make it a decent size
|
// 4. show plotter and make it a decent size
|
||||||
widMain.show();
|
widMain.show();
|
||||||
widMain.resize(800,500);
|
widMain.resize(800/widMain.devicePixelRatioF(),500/widMain.devicePixelRatioF());
|
||||||
|
|
||||||
return app.exec();
|
return app.exec();
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
*
|
*
|
||||||
* \ref JKQTPlotterGeometricGraphs
|
* \ref JKQTPlotterGeometricGraphs
|
||||||
*/
|
*/
|
||||||
#include "jkqtpexampleapplication.h"
|
#include "jkqtpexampleapplication.h"
|
||||||
#include <QCheckBox>
|
#include <QCheckBox>
|
||||||
#include <QComboBox>
|
#include <QComboBox>
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
@ -14,7 +14,7 @@
|
|||||||
int main(int argc, char* argv[])
|
int main(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
|
|
||||||
JKQTPAppSettingController highDPIController(argc, argv);
|
JKQTPAppSettingController highDPIController(argc, argv);
|
||||||
JKQTPExampleApplication app(argc, argv);
|
JKQTPExampleApplication app(argc, argv);
|
||||||
|
|
||||||
|
|
||||||
@ -261,7 +261,7 @@ int main(int argc, char* argv[])
|
|||||||
|
|
||||||
// 4. show plotter and make it a decent size
|
// 4. show plotter and make it a decent size
|
||||||
widMain.show();
|
widMain.show();
|
||||||
widMain.resize(1100,800);
|
widMain.resize(1100/widMain.devicePixelRatioF(),1000/widMain.devicePixelRatioF());
|
||||||
|
|
||||||
return app.exec();
|
return app.exec();
|
||||||
}
|
}
|
||||||
|
@ -105,7 +105,7 @@ 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());
|
||||||
plot.setWindowTitle("JKQTPColumnMathImage");
|
plot.setWindowTitle("JKQTPColumnMathImage");
|
||||||
|
|
||||||
|
|
||||||
|
@ -99,7 +99,7 @@ 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(800/plot.devicePixelRatioF(),400/plot.devicePixelRatioF());
|
||||||
plot.setWindowTitle("JKQTPColumnMathImage");
|
plot.setWindowTitle("JKQTPColumnMathImage");
|
||||||
|
|
||||||
|
|
||||||
|
@ -93,7 +93,7 @@ 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());
|
||||||
plot.setWindowTitle("JKQTPMathImage");
|
plot.setWindowTitle("JKQTPMathImage");
|
||||||
|
|
||||||
|
|
||||||
|
@ -165,7 +165,7 @@ int main(int argc, char* argv[])
|
|||||||
|
|
||||||
// 8. show plotter and make it a decent size
|
// 8. show plotter and make it a decent size
|
||||||
win.show();
|
win.show();
|
||||||
win.resize(500,550);
|
win.resize(500/plot->devicePixelRatioF(),550/plot->devicePixelRatioF());
|
||||||
win.setWindowTitle("JKQTPColumnMathImage, USer Palettes");
|
win.setWindowTitle("JKQTPColumnMathImage, USer Palettes");
|
||||||
|
|
||||||
|
|
||||||
|
@ -62,7 +62,7 @@ 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,400);
|
plot.resize(600/plot.devicePixelRatioF(),400/plot.devicePixelRatioF());
|
||||||
|
|
||||||
return app.exec();
|
return app.exec();
|
||||||
}
|
}
|
||||||
|
@ -7,8 +7,10 @@
|
|||||||
#include "jkqtplotter/jkqtplotter.h"
|
#include "jkqtplotter/jkqtplotter.h"
|
||||||
|
|
||||||
|
|
||||||
JKQTPExampleApplication::JKQTPExampleApplication(int &argc, char **argv):
|
JKQTPExampleApplication::JKQTPExampleApplication(int &argc, char **argv, bool _waitForScreenshotReady):
|
||||||
QApplication(argc, argv),
|
QApplication(argc, argv),
|
||||||
|
waitForScreenshotReady(_waitForScreenshotReady),
|
||||||
|
readyForScreenshot(!_waitForScreenshotReady),
|
||||||
saveScreenshot(false),
|
saveScreenshot(false),
|
||||||
saveSmallScreenshot(false),
|
saveSmallScreenshot(false),
|
||||||
saveScreenshotPlot(false),
|
saveScreenshotPlot(false),
|
||||||
@ -17,17 +19,6 @@ JKQTPExampleApplication::JKQTPExampleApplication(int &argc, char **argv):
|
|||||||
screenshotBasename("screenshot")
|
screenshotBasename("screenshot")
|
||||||
{
|
{
|
||||||
screenshotDir=QDir::current();
|
screenshotDir=QDir::current();
|
||||||
for (int i=0; i<argc; i++) {
|
|
||||||
if (QString(argv[i])=="--disablehighdpi") {
|
|
||||||
#if QT_VERSION >= QT_VERSION_CHECK(5,6,0) && QT_VERSION < QT_VERSION_CHECK(6,0,0)
|
|
||||||
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling, false); // DPI support
|
|
||||||
QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps, false); //HiDPI pixmaps
|
|
||||||
#endif
|
|
||||||
#if QT_VERSION >= QT_VERSION_CHECK(6,0,0)
|
|
||||||
QApplication::setAttribute(Qt::AA_Use96Dpi); // disable DPI support
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
JKQTPExampleApplication::~JKQTPExampleApplication()
|
JKQTPExampleApplication::~JKQTPExampleApplication()
|
||||||
@ -96,13 +87,38 @@ QRect JKQTPExampleApplication::getBoundsWithoutColor(QImage qImage, const QColor
|
|||||||
int JKQTPExampleApplication::exec()
|
int JKQTPExampleApplication::exec()
|
||||||
{
|
{
|
||||||
readCmdLine();
|
readCmdLine();
|
||||||
if (saveScreenshot||saveSmallScreenshot) {
|
if (saveScreenshot||saveSmallScreenshot||saveScreenshotPlot||saveSmallScreenshotPlot) {
|
||||||
QElapsedTimer timer;
|
QList<JKQTPlotter*> plotterList;
|
||||||
timer.start();
|
auto checkPlottersResizeDone=[plotterList]() {
|
||||||
while(timer.elapsed()<150) {
|
if (plotterList.isEmpty()) return true;
|
||||||
QApplication::processEvents();
|
for (JKQTPlotter* p: plotterList) {
|
||||||
|
if (p->isResizeTimerRunning()) return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
for (QWidget* w: allWidgets()) {
|
||||||
|
JKQTPlotter* plot=dynamic_cast<JKQTPlotter*>(w);
|
||||||
|
if (plot) plotterList<<plot;
|
||||||
}
|
}
|
||||||
QWidgetList widgets=topLevelWidgets();
|
QWidgetList widgets=topLevelWidgets();
|
||||||
|
std::sort(widgets.begin(), widgets.end(), [](const QWidget* a, const QWidget* b) {
|
||||||
|
if (a && b) return a->windowTitle().toLower()<b->windowTitle().toLower();
|
||||||
|
if (a) return true;
|
||||||
|
if (b) return false;
|
||||||
|
return a<b;
|
||||||
|
});
|
||||||
|
//JKQTPlotter::setGlobalResizeDelay(10);
|
||||||
|
QElapsedTimer timer;
|
||||||
|
timer.start();
|
||||||
|
while(timer.elapsed()<JKQTPlotter::getGlobalResizeDelay()*3/2 || !readyForScreenshot || !checkPlottersResizeDone()) {
|
||||||
|
QApplication::processEvents();
|
||||||
|
QApplication::processEvents();
|
||||||
|
}
|
||||||
|
timer.start();
|
||||||
|
while(timer.elapsed()<50) {
|
||||||
|
QApplication::processEvents();
|
||||||
|
QApplication::processEvents();
|
||||||
|
}
|
||||||
int iVisible=0;
|
int iVisible=0;
|
||||||
for (int i=0; i<widgets.size(); i++) {
|
for (int i=0; i<widgets.size(); i++) {
|
||||||
QWidget* w=widgets[i];
|
QWidget* w=widgets[i];
|
||||||
@ -120,14 +136,14 @@ int JKQTPExampleApplication::exec()
|
|||||||
} else {
|
} else {
|
||||||
pix=pix_win;
|
pix=pix_win;
|
||||||
}*/
|
}*/
|
||||||
if (saveScreenshot) {
|
if (saveScreenshot || (saveScreenshotPlot&&!plot)) {
|
||||||
if (scaleDownFromHighDPI && pix_win.devicePixelRatio()>1.0) {
|
if (scaleDownFromHighDPI && pix_win.devicePixelRatio()>1.0) {
|
||||||
pix_win.scaled((QSizeF(pix_win.size())/pix_win.devicePixelRatio()).toSize()).save(screenshotDir.absoluteFilePath(bn+".png"));
|
pix_win.scaled((QSizeF(pix_win.size())/pix_win.devicePixelRatio()).toSize()).save(screenshotDir.absoluteFilePath(bn+".png"));
|
||||||
} else {
|
} else {
|
||||||
pix_win.save(screenshotDir.absoluteFilePath(bn+".png"));
|
pix_win.save(screenshotDir.absoluteFilePath(bn+".png"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (saveSmallScreenshot) {
|
if (saveSmallScreenshot || (saveSmallScreenshotPlot&&!plot)) {
|
||||||
QPixmap img=pix_win.scaledToWidth(150, Qt::SmoothTransformation);
|
QPixmap img=pix_win.scaledToWidth(150, Qt::SmoothTransformation);
|
||||||
img.save(screenshotDir.absoluteFilePath(bn+"_small.png"));
|
img.save(screenshotDir.absoluteFilePath(bn+"_small.png"));
|
||||||
}
|
}
|
||||||
@ -160,3 +176,8 @@ int JKQTPExampleApplication::exec()
|
|||||||
return QApplication::exec();
|
return QApplication::exec();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void JKQTPExampleApplication::notifyReadyForScreenshot()
|
||||||
|
{
|
||||||
|
readyForScreenshot=true;
|
||||||
|
}
|
||||||
|
@ -9,13 +9,16 @@
|
|||||||
class JKQTPExampleApplication: public QApplication {
|
class JKQTPExampleApplication: public QApplication {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
JKQTPExampleApplication(int &argc, char **argv);
|
JKQTPExampleApplication(int &argc, char **argv, bool waitForScreenshotReady=false);
|
||||||
|
|
||||||
virtual ~JKQTPExampleApplication();
|
virtual ~JKQTPExampleApplication();
|
||||||
|
|
||||||
int exec();
|
int exec();
|
||||||
|
public slots:
|
||||||
|
void notifyReadyForScreenshot();
|
||||||
protected:
|
protected:
|
||||||
|
bool waitForScreenshotReady;
|
||||||
|
bool readyForScreenshot;
|
||||||
QDir screenshotDir;
|
QDir screenshotDir;
|
||||||
bool saveScreenshot;
|
bool saveScreenshot;
|
||||||
bool saveSmallScreenshot;
|
bool saveSmallScreenshot;
|
||||||
|
@ -110,7 +110,7 @@ int main(int argc, char* argv[])
|
|||||||
|
|
||||||
// 7. show plotter and make it a decent size
|
// 7. show plotter and make it a decent size
|
||||||
plot.show();
|
plot.show();
|
||||||
plot.resize(700,500);
|
plot.resize(700/plot.devicePixelRatioF(),500/plot.devicePixelRatioF());
|
||||||
|
|
||||||
return app.exec();
|
return app.exec();
|
||||||
}
|
}
|
||||||
|
@ -15,9 +15,10 @@ int main(int argc, char* argv[])
|
|||||||
{
|
{
|
||||||
|
|
||||||
JKQTPAppSettingController highDPIController(argc, argv);
|
JKQTPAppSettingController highDPIController(argc, argv);
|
||||||
JKQTPExampleApplication app(argc, argv);
|
JKQTPExampleApplication app(argc, argv, true);
|
||||||
|
|
||||||
MandelbrotMainWindow widMain;
|
MandelbrotMainWindow widMain;
|
||||||
|
widMain.connect(&widMain, SIGNAL(readyForScreenshot()), &app, SLOT(notifyReadyForScreenshot()));
|
||||||
|
|
||||||
widMain.show();
|
widMain.show();
|
||||||
|
|
||||||
|
@ -125,6 +125,7 @@ void MandelbrotMainWindow::plotZoomChangedLocally(double newxmin, double newxmax
|
|||||||
// this call ensures correctly set NX and NY
|
// this call ensures correctly set NX and NY
|
||||||
graph->setImageColumn(mandelbrot_col_display);
|
graph->setImageColumn(mandelbrot_col_display);
|
||||||
ui->plot->redrawPlot();
|
ui->plot->redrawPlot();
|
||||||
|
emit readyForScreenshot();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -17,6 +17,8 @@ class MandelbrotMainWindow : public QMainWindow
|
|||||||
public:
|
public:
|
||||||
explicit MandelbrotMainWindow(QWidget *parent = nullptr);
|
explicit MandelbrotMainWindow(QWidget *parent = nullptr);
|
||||||
~MandelbrotMainWindow();
|
~MandelbrotMainWindow();
|
||||||
|
signals:
|
||||||
|
void readyForScreenshot();
|
||||||
protected slots:
|
protected slots:
|
||||||
void paletteChanged(JKQTPMathImageColorPalette pal);
|
void paletteChanged(JKQTPMathImageColorPalette pal);
|
||||||
void plotZoomChangedLocally(double newxmin, double newxmax, double newymin, double newymax, JKQTPlotter* sender);
|
void plotZoomChangedLocally(double newxmin, double newxmax, double newymin, double newymax, JKQTPlotter* sender);
|
||||||
|
@ -1,18 +1,18 @@
|
|||||||
cmake_minimum_required(VERSION 3.16)
|
cmake_minimum_required(VERSION 3.16)
|
||||||
|
|
||||||
set(EXAMPLE_NAME test_multiplot)
|
set(EXAMPLE_NAME multiplot)
|
||||||
set(EXENAME jkqtptest_${EXAMPLE_NAME})
|
set(EXENAME jkqtptest_${EXAMPLE_NAME})
|
||||||
|
|
||||||
message( STATUS ".. Building Example ${EXAMPLE_NAME}" )
|
message( STATUS ".. Building Example ${EXAMPLE_NAME}" )
|
||||||
|
|
||||||
|
|
||||||
# Set up source files
|
# Set up source files
|
||||||
set(SOURCES ${EXAMPLE_NAME}.cpp test_multiplot_ui.cpp)
|
set(SOURCES test_multiplot.cpp test_multiplot_ui.cpp)
|
||||||
set(HEADERS test_multiplot_ui.h)
|
set(HEADERS test_multiplot_ui.h)
|
||||||
set(RESOURCES test_multiplot.qrc )
|
set(RESOURCES test_multiplot.qrc )
|
||||||
set(UIS test_multiplot_ui.ui )
|
set(UIS test_multiplot_ui.ui )
|
||||||
|
|
||||||
add_executable(${EXENAME} WIN32 ${SOURCES} ${HEADERS} ${RESOURCES} ${UIS})
|
add_executable(${EXENAME} WIN32 ${SOURCES} ${HEADERS} ${RESOURCES} ${UIS})
|
||||||
target_link_libraries(${EXENAME} JKQTPExampleToolsLib)
|
target_link_libraries(${EXENAME} JKQTPExampleToolsLib)
|
||||||
target_include_directories(${EXENAME} PRIVATE ../../lib)
|
target_include_directories(${EXENAME} PRIVATE ../../lib)
|
||||||
if(JKQtPlotter_BUILD_STATIC_LIBS)
|
if(JKQtPlotter_BUILD_STATIC_LIBS)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# Example (JKQTPlotter): Laying out Several Plots {#JKQTPlotterMultiPlotLayout}
|
# Example (JKQTPlotter): Laying out Several Plots {#JKQTPlotterMultiPlotLayout}
|
||||||
This project (see `./examples/test_multiplot/`) shows how several JKQTPlotter widgets can be combined to in a layout (based on the [Qt layouting system](http://doc.qt.io/qt-5/layout.html)). It also shows how axes in such a layout can be linked to improve user experience.
|
This project (see `./examples/multiplot/`) shows how several JKQTPlotter widgets can be combined to in a layout (based on the [Qt layouting system](http://doc.qt.io/qt-5/layout.html)). It also shows how axes in such a layout can be linked to improve user experience.
|
||||||
|
|
||||||
The source code of the main application can be found in [`test_multiplot.cpp`](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/test_multiplot/test_multiplot.cpp).
|
The source code of the main application can be found in [`test_multiplot.cpp`](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/multiplot/test_multiplot.cpp).
|
||||||
|
|
||||||
First three plots are generated and put into a [QGridLayout](http://doc.qt.io/qt-5/qgridlayout.html):
|
First three plots are generated and put into a [QGridLayout](http://doc.qt.io/qt-5/qgridlayout.html):
|
||||||
|
|
||||||
@ -55,7 +55,7 @@ Finally: When printing or saving an image of the plots, the plotter will no know
|
|||||||
|
|
||||||
In the first line, grid-printing (i.e. the layouted printing of several graphs) is activated. Then the arrangement of the two slave plots `plotResid` and `plotResidHist` is defined as (`x,y`)-shifts with respect to the master plot `plotMain`.
|
In the first line, grid-printing (i.e. the layouted printing of several graphs) is activated. Then the arrangement of the two slave plots `plotResid` and `plotResidHist` is defined as (`x,y`)-shifts with respect to the master plot `plotMain`.
|
||||||
|
|
||||||
Now some data is generated and several curves are added to the graphs. See [`test_multiplot.cpp`](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/test_multiplot/test_multiplot.cpp) for the full source code.
|
Now some data is generated and several curves are added to the graphs. See [`test_multiplot.cpp`](https://github.com/jkriege2/JKQtPlotter/tree/master/examples/multiplot/test_multiplot.cpp) for the full source code.
|
||||||
|
|
||||||
Finally the axes and plots need a bit of formatting to make them look nicer:
|
Finally the axes and plots need a bit of formatting to make them look nicer:
|
||||||
|
|
||||||
@ -92,15 +92,15 @@ As a last step, the axes are scaled automatically, so the data fills the plots:
|
|||||||
|
|
||||||
The result looks like this:
|
The result looks like this:
|
||||||
|
|
||||||
![test_multiplot](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/test_multiplot.png)
|
![multiplot](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/multiplot.png)
|
||||||
|
|
||||||
You push the print button (![test_multiplot](https://raw.githubusercontent.com/jkriege2/JKQTPlotter/master/lib/jkqtplotter/resources/images/jkqtp_24_print.png)) to open a print preview dialog, which will give an impression of how the three plots will be arranged in a printout:
|
You push the print button (![print](https://raw.githubusercontent.com/jkriege2/JKQTPlotter/master/lib/jkqtplotter/resources/images/jkqtp_24_print.png)) to open a print preview dialog, which will give an impression of how the three plots will be arranged in a printout:
|
||||||
|
|
||||||
![test_multiplot](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/test_multiplot_printpreview.png)
|
![multiplot_printpreview](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/multiplot_printpreview.png)
|
||||||
|
|
||||||
In addition this example also contains a Window that allows to control the plot layout and synchronization options:
|
In addition this example also contains a Window that allows to control the plot layout and synchronization options:
|
||||||
|
|
||||||
![test_multiplot](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/test_multiplot_controlwindow.png)
|
![multiplot_controlwindow](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/multiplot_controlwindow.png)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ int main(int argc, char* argv[])
|
|||||||
|
|
||||||
// 1. create a widget
|
// 1. create a widget
|
||||||
QWidget mainWidget;
|
QWidget mainWidget;
|
||||||
mainWidget.setWindowTitle("JKQTPlotter(s) in a QGridLayout");
|
mainWidget.setWindowTitle("1: JKQTPlotter(s) in a QGridLayout");
|
||||||
|
|
||||||
// 2. Create a QGridLayout for the plots and add it to the widget.
|
// 2. Create a QGridLayout for the plots and add it to the widget.
|
||||||
QGridLayout* layout=new QGridLayout();
|
QGridLayout* layout=new QGridLayout();
|
||||||
@ -67,6 +67,7 @@ int main(int argc, char* argv[])
|
|||||||
// - in plotResidHist we will show a histogram of the residuals (calculated in histogram)
|
// - in plotResidHist we will show a histogram of the residuals (calculated in histogram)
|
||||||
std::random_device rd;
|
std::random_device rd;
|
||||||
std::mt19937 gen(rd());
|
std::mt19937 gen(rd());
|
||||||
|
gen.seed(12345);
|
||||||
std::normal_distribution<> d(0,0.5);
|
std::normal_distribution<> d(0,0.5);
|
||||||
|
|
||||||
std::vector<double> dataX, dataY, dataRY;
|
std::vector<double> dataX, dataY, dataRY;
|
||||||
@ -154,12 +155,12 @@ int main(int argc, char* argv[])
|
|||||||
plotResidHist->setAbsoluteX(0, 20);
|
plotResidHist->setAbsoluteX(0, 20);
|
||||||
plotResid->zoomToFit();
|
plotResid->zoomToFit();
|
||||||
plotResidHist->zoomToFit();
|
plotResidHist->zoomToFit();
|
||||||
plotMain->zoomToFit();
|
plotMain->setXY(-1,9.5,-1,5.5);
|
||||||
|
|
||||||
// 8. show plotter and make it a decent size
|
// 8. show plotter and make it a decent size
|
||||||
mainWidget.show();
|
mainWidget.show();
|
||||||
mainWidget.move(32,32);
|
mainWidget.move(32,32);
|
||||||
mainWidget.resize(800,600);
|
mainWidget.resize(800/mainWidget.devicePixelRatioF(),600/mainWidget.devicePixelRatioF());
|
||||||
|
|
||||||
// 9. create a second window, which controls the synchronization and layout between the plots
|
// 9. create a second window, which controls the synchronization and layout between the plots
|
||||||
TestMultiplotUI controlWindow(plotMain, plotResid, plotResidHist, layout);
|
TestMultiplotUI controlWindow(plotMain, plotResid, plotResidHist, layout);
|
||||||
|
@ -9,7 +9,7 @@ QT += core gui xml svg
|
|||||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport
|
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport
|
||||||
|
|
||||||
# output executable name
|
# output executable name
|
||||||
TARGET = test_multiplot
|
TARGET = multiplot
|
||||||
|
|
||||||
|
|
||||||
# include JKQTPlotter source code
|
# include JKQTPlotter source code
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Set Multi-Plot Properties</string>
|
<string>2: Set Multi-Plot Properties</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
<item row="3" column="1">
|
<item row="3" column="1">
|
||||||
|
@ -51,6 +51,7 @@ int main(int argc, char* argv[])
|
|||||||
graph1->setYColumn(columnY);
|
graph1->setYColumn(columnY);
|
||||||
graph1->setDrawLine(true);
|
graph1->setDrawLine(true);
|
||||||
graph1->setSymbolType(JKQTPNoSymbol);
|
graph1->setSymbolType(JKQTPNoSymbol);
|
||||||
|
graph1->setUseNonvisibleLineCompression(false); // necessary, because this is enabled by default and leads a distrubed plot
|
||||||
graph1->setTitle("one-colored spiral");
|
graph1->setTitle("one-colored spiral");
|
||||||
plot.addGraph(graph1);
|
plot.addGraph(graph1);
|
||||||
|
|
||||||
@ -89,9 +90,11 @@ int main(int argc, char* argv[])
|
|||||||
|
|
||||||
// 5. show plotters and make them a decent size
|
// 5. show plotters and make them a decent size
|
||||||
plot.show();
|
plot.show();
|
||||||
plot.resize(600,600);
|
plot.resize(400,400);
|
||||||
|
plot.setWindowTitle("1: JKQTPXYLineGraph");
|
||||||
plot2.show();
|
plot2.show();
|
||||||
plot2.resize(600,600);
|
plot2.setWindowTitle("2: JKQTPXYParametrizedScatterGraph");
|
||||||
|
plot2.resize(400,400);
|
||||||
|
|
||||||
return app.exec();
|
return app.exec();
|
||||||
}
|
}
|
||||||
|
@ -179,7 +179,7 @@ int main(int argc, char* argv[])
|
|||||||
|
|
||||||
// 5. show plotter and make it a decent size
|
// 5. show plotter and make it a decent size
|
||||||
plot.show();
|
plot.show();
|
||||||
plot.resize(800,600);
|
plot.resize(1000/plot.devicePixelRatioF(),600/plot.devicePixelRatioF());
|
||||||
|
|
||||||
return app.exec();
|
return app.exec();
|
||||||
}
|
}
|
||||||
|
@ -79,18 +79,18 @@ int main(int argc, char* argv[])
|
|||||||
plot.getYAxis()->setAxisLabel("y-axis");
|
plot.getYAxis()->setAxisLabel("y-axis");
|
||||||
plot.getXAxis()->setDrawGrid(false);
|
plot.getXAxis()->setDrawGrid(false);
|
||||||
plot.getYAxis()->setDrawGrid(false);
|
plot.getYAxis()->setDrawGrid(false);
|
||||||
// max. size is the size of the image
|
|
||||||
plot.setXY(0,image.width()-1,0,image.height()-1);
|
|
||||||
plot.setAbsoluteXY(0,image.width()-1,0,image.height()-1);
|
|
||||||
// ensure that axis aspect ratio and coordinate system aspect ratio are maintained
|
// ensure that axis aspect ratio and coordinate system aspect ratio are maintained
|
||||||
plot.getPlotter()->setMaintainAspectRatio(true);
|
plot.getPlotter()->setMaintainAspectRatio(true);
|
||||||
plot.getPlotter()->setAspectRatio(1);
|
plot.getPlotter()->setAspectRatio(1);
|
||||||
plot.getPlotter()->setMaintainAxisAspectRatio(true);
|
plot.getPlotter()->setMaintainAxisAspectRatio(true);
|
||||||
plot.getPlotter()->setAxisAspectRatio(1);
|
plot.getPlotter()->setAxisAspectRatio(1);
|
||||||
|
// max. size is the size of the image
|
||||||
|
plot.setAbsoluteXY(0,image.width()-1,0,image.height()-1);
|
||||||
|
plot.setXY(0,image.width()-1,0,image.height()-1);
|
||||||
|
|
||||||
// 5. show plotter and make it a decent size
|
// 5. show plotter and make it a decent size
|
||||||
plot.show();
|
plot.show();
|
||||||
plot.resize(800,800);
|
plot.resize(800/plot.devicePixelRatioF(),850/plot.devicePixelRatioF());
|
||||||
|
|
||||||
return app.exec();
|
return app.exec();
|
||||||
}
|
}
|
||||||
|
@ -81,7 +81,7 @@ int main(int argc, char* argv[])
|
|||||||
|
|
||||||
// show window and make it a decent size
|
// show window and make it a decent size
|
||||||
mainWin.show();
|
mainWin.show();
|
||||||
mainWin.resize(600,400);
|
mainWin.resize(600/mainWin.devicePixelRatioF(),400/mainWin.devicePixelRatioF());
|
||||||
|
|
||||||
return app.exec();
|
return app.exec();
|
||||||
}
|
}
|
||||||
|
@ -109,7 +109,7 @@ 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());
|
||||||
plot.setWindowTitle("JKQTPColumnRGBMathImage");
|
plot.setWindowTitle("JKQTPColumnRGBMathImage");
|
||||||
|
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ int main(int argc, char* argv[])
|
|||||||
|
|
||||||
// 8. show plotter and make it a decent size
|
// 8. show plotter and make it a decent size
|
||||||
plot.show();
|
plot.show();
|
||||||
plot.resize(800,600);
|
plot.resize(800/plot.devicePixelRatioF(),600/plot.devicePixelRatioF());
|
||||||
plot.setWindowTitle("JKQTPImage");
|
plot.setWindowTitle("JKQTPImage");
|
||||||
|
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ int main(int argc, char* argv[])
|
|||||||
// show plotter and make it a decent size
|
// show plotter and make it a decent size
|
||||||
plot.getPlotter()->setPlotLabel(QObject::tr("Scatter Example"));
|
plot.getPlotter()->setPlotLabel(QObject::tr("Scatter Example"));
|
||||||
plot.show();
|
plot.show();
|
||||||
plot.resize(600,400);
|
plot.resize(600/plot.devicePixelRatioF(),400/plot.devicePixelRatioF());
|
||||||
|
|
||||||
return app.exec();
|
return app.exec();
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,6 @@
|
|||||||
* \ref JKQTPlotterSimpleTest
|
* \ref JKQTPlotterSimpleTest
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "jkqtpexampleapplication.h"
|
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include "jkqtplotter/jkqtplotter.h"
|
#include "jkqtplotter/jkqtplotter.h"
|
||||||
#include "jkqtplotter/graphs/jkqtpscatter.h"
|
#include "jkqtplotter/graphs/jkqtpscatter.h"
|
||||||
@ -54,7 +53,7 @@ int main(int argc, char* argv[])
|
|||||||
// show plotter and make it a decent size
|
// show plotter and make it a decent size
|
||||||
plot.getPlotter()->setPlotLabel(QObject::tr("Simple Test"));
|
plot.getPlotter()->setPlotLabel(QObject::tr("Simple Test"));
|
||||||
plot.show();
|
plot.show();
|
||||||
plot.resize(600,400);
|
plot.resize(400,300);
|
||||||
|
|
||||||
return app.exec();
|
return app.exec();
|
||||||
}
|
}
|
||||||
|
@ -104,8 +104,8 @@ int main(int argc, char* argv[])
|
|||||||
```
|
```
|
||||||
The result looks like this:
|
The result looks like this:
|
||||||
|
|
||||||
![JKQTPBarVerticalGraphStacked](https://raw.githubusercontent.com/jkriege2/JKQTPlotter/master/doc/images/JKQTPbarVerticalGraphStacked.png)
|
![JKQTPBarVerticalGraphStacked](https://raw.githubusercontent.com/jkriege2/JKQTPlotter/master/screenshots/stackedbars.png)
|
||||||
|
|
||||||
If you use `JKQTPBarHorizontalGraphStacked` instead of `JKQTPBarVerticalStackableGraph`, you'll get a result like this:
|
If you use `JKQTPBarHorizontalGraphStacked` instead of `JKQTPBarVerticalStackableGraph`, you'll get a result like this:
|
||||||
![JKQTPBarHorizontalGraphStacked](https://raw.githubusercontent.com/jkriege2/JKQTPlotter/master/doc/images/JKQTPbarHorizontalGraphStacked.png)
|
![JKQTPBarHorizontalGraphStacked](https://raw.githubusercontent.com/jkriege2/JKQTPlotter/master/screenshots/stackedbars_hor.png)
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ void addGraph(JKQTPlotter& plot, bool swapXY) {
|
|||||||
|
|
||||||
// show plotter and make it a decent size
|
// show plotter and make it a decent size
|
||||||
plot.show();
|
plot.show();
|
||||||
plot.resize(600,400);
|
plot.resize(550,350);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -110,11 +110,11 @@ int main(int argc, char* argv[])
|
|||||||
|
|
||||||
JKQTPlotter plotV;
|
JKQTPlotter plotV;
|
||||||
addGraph<JKQTPBarVerticalStackableGraph>(plotV, false);
|
addGraph<JKQTPBarVerticalStackableGraph>(plotV, false);
|
||||||
plotV.setWindowTitle("JKQTPBarVerticalStackableGraph");
|
plotV.setWindowTitle("1: JKQTPBarVerticalStackableGraph");
|
||||||
|
|
||||||
JKQTPlotter plotH;
|
JKQTPlotter plotH;
|
||||||
addGraph<JKQTPBarHorizontalStackableGraph>(plotH, true);
|
addGraph<JKQTPBarHorizontalStackableGraph>(plotH, true);
|
||||||
plotH.setWindowTitle("JKQTPBarHorizontalStackableGraph");
|
plotH.setWindowTitle("2: JKQTPBarHorizontalStackableGraph");
|
||||||
|
|
||||||
plotV.move(100,100);
|
plotV.move(100,100);
|
||||||
plotH.move(750,100);
|
plotH.move(750,100);
|
||||||
|
@ -178,7 +178,7 @@ int main(int argc, char* argv[])
|
|||||||
|
|
||||||
// 6. show plotter and make it a decent size
|
// 6. show plotter and make it a decent size
|
||||||
plot.show();
|
plot.show();
|
||||||
plot.resize(800,600);
|
plot.resize(800/plot.devicePixelRatioF(),600/plot.devicePixelRatioF());
|
||||||
|
|
||||||
return app.exec();
|
return app.exec();
|
||||||
}
|
}
|
||||||
|
@ -212,7 +212,7 @@ int main(int argc, char* argv[])
|
|||||||
|
|
||||||
// 13. show plotter and make it a decent size
|
// 13. show plotter and make it a decent size
|
||||||
plot.show();
|
plot.show();
|
||||||
plot.resize(600,500);
|
plot.resize(600/plot.devicePixelRatioF(),500/plot.devicePixelRatioF());
|
||||||
|
|
||||||
return app.exec();
|
return app.exec();
|
||||||
}
|
}
|
||||||
|
@ -53,6 +53,7 @@ TestStyling::~TestStyling()
|
|||||||
if (!plotExtra.isNull()) {
|
if (!plotExtra.isNull()) {
|
||||||
plotExtra->close();
|
plotExtra->close();
|
||||||
plotExtra.clear();
|
plotExtra.clear();
|
||||||
|
plotExtra->setWindowTitle("2: symbols/lines");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Tutorial/TestApp: JKQTPlotter Styling</string>
|
<string>1: Tutorial/TestApp: JKQTPlotter Styling</string>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="centralwidget">
|
<widget class="QWidget" name="centralwidget">
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
@ -68,7 +68,7 @@ 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,400);
|
plot.resize(600/plot.devicePixelRatioF(),400/plot.devicePixelRatioF());
|
||||||
|
|
||||||
return app.exec();
|
return app.exec();
|
||||||
}
|
}
|
||||||
|
@ -101,7 +101,7 @@ int main(int argc, char* argv[])
|
|||||||
|
|
||||||
// 5. show plotter and make it a decent size
|
// 5. show plotter and make it a decent size
|
||||||
plot.show();
|
plot.show();
|
||||||
plot.resize(1200, 900);
|
plot.resize(1700/plot.devicePixelRatioF(), 1100/plot.devicePixelRatioF());
|
||||||
|
|
||||||
return app.exec();
|
return app.exec();
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
template <class TGraph, JKQTPSingleColumnSymbolsGraph::DataDirection DataOrientation>
|
template <class TGraph, JKQTPSingleColumnSymbolsGraph::DataDirection DataOrientation>
|
||||||
JKQTPlotter* showPlot() {
|
JKQTPlotter* showPlot(const QString& title) {
|
||||||
|
|
||||||
// 1. create a plotter window and get a pointer to the internal datastore (for convenience)
|
// 1. create a plotter window and get a pointer to the internal datastore (for convenience)
|
||||||
JKQTPlotter* plot=new JKQTPlotter();
|
JKQTPlotter* plot=new JKQTPlotter();
|
||||||
@ -32,11 +32,11 @@ JKQTPlotter* showPlot() {
|
|||||||
size_t randomdatacol3=datastore1->addColumn("random data N(6,2)");
|
size_t randomdatacol3=datastore1->addColumn("random data N(6,2)");
|
||||||
std::random_device rd; // random number generators:
|
std::random_device rd; // random number generators:
|
||||||
std::mt19937 gen{rd()};
|
std::mt19937 gen{rd()};
|
||||||
gen.seed(12345);
|
gen.seed(1236);
|
||||||
std::uniform_int_distribution<> ddecide(0,1);
|
std::uniform_int_distribution<> ddecide(0,1);
|
||||||
std::normal_distribution<> d1{1,1};
|
std::normal_distribution<> d1{1,1};
|
||||||
std::normal_distribution<> d2{6,2};
|
std::normal_distribution<> d2{6,2};
|
||||||
for (size_t i=0; i<50; i++) {
|
for (size_t i=0; i<40; i++) {
|
||||||
double v=0;
|
double v=0;
|
||||||
if (i%2==0) {
|
if (i%2==0) {
|
||||||
v=d1(gen);
|
v=d1(gen);
|
||||||
@ -47,15 +47,16 @@ JKQTPlotter* showPlot() {
|
|||||||
}
|
}
|
||||||
datastore1->appendToColumn(randomdatacol1, v);
|
datastore1->appendToColumn(randomdatacol1, v);
|
||||||
}
|
}
|
||||||
const QString d1_latex="$\\mathcal{N}("+jkqtp_floattolatexqstr(d1.mean(), 1)+","+jkqtp_floattolatexqstr(d1.stddev(), 1)+")+\\mathcal{N}("+jkqtp_floattolatexqstr(d2.mean(), 1)+","+jkqtp_floattolatexqstr(d2.stddev(), 1)+")$";
|
const QString d1_latex="$\\mathcal{N}_{"+jkqtp_floattolatexqstr(d1.mean(), 0, true)+","+jkqtp_floattolatexqstr(d1.stddev(), 0, true)+"}+\\mathcal{N}_{"+jkqtp_floattolatexqstr(d2.mean(), 0, true)+","+jkqtp_floattolatexqstr(d2.stddev(), 0, true)+"}$";
|
||||||
const QString d2_latex="$\\mathcal{N}("+jkqtp_floattolatexqstr(d1.mean(), 1)+","+jkqtp_floattolatexqstr(d1.stddev(), 1)+")$";
|
const QString d2_latex="$\\mathcal{N}_{"+jkqtp_floattolatexqstr(d1.mean(), 0, true)+","+jkqtp_floattolatexqstr(d1.stddev(), 0, true)+"}$";
|
||||||
const QString d3_latex="$\\mathcal{N}("+jkqtp_floattolatexqstr(d2.mean(), 1)+","+jkqtp_floattolatexqstr(d2.stddev(), 1)+")$";
|
const QString d3_latex="$\\mathcal{N}_{"+jkqtp_floattolatexqstr(d2.mean(), 0, true)+","+jkqtp_floattolatexqstr(d2.stddev(), 0, true)+"}$";
|
||||||
|
|
||||||
|
|
||||||
// 3. we visualize the data as scatter plots
|
// 3. we visualize the data as scatter plots
|
||||||
JKQTPSingleColumnSymbolsGraph* gData1;
|
JKQTPSingleColumnSymbolsGraph* gData1;
|
||||||
plot->addGraph(gData1=new JKQTPSingleColumnSymbolsGraph(plot));
|
plot->addGraph(gData1=new JKQTPSingleColumnSymbolsGraph(plot));
|
||||||
gData1->setPosition(0);
|
gData1->setPosition(0);
|
||||||
|
gData1->setWidth(0.5);
|
||||||
gData1->setPositionScatterStyle(JKQTPSingleColumnSymbolsGraph::RugPlot);
|
gData1->setPositionScatterStyle(JKQTPSingleColumnSymbolsGraph::RugPlot);
|
||||||
gData1->setDataColumn(randomdatacol1);
|
gData1->setDataColumn(randomdatacol1);
|
||||||
gData1->setTitle(d3_latex);
|
gData1->setTitle(d3_latex);
|
||||||
@ -63,7 +64,8 @@ JKQTPlotter* showPlot() {
|
|||||||
|
|
||||||
JKQTPSingleColumnSymbolsGraph* gData2;
|
JKQTPSingleColumnSymbolsGraph* gData2;
|
||||||
plot->addGraph(gData2=new JKQTPSingleColumnSymbolsGraph(plot));
|
plot->addGraph(gData2=new JKQTPSingleColumnSymbolsGraph(plot));
|
||||||
gData2->setPosition(5);
|
gData2->setPosition(7.5);
|
||||||
|
gData2->setWidth(0.5);
|
||||||
gData2->setPositionScatterStyle(JKQTPSingleColumnSymbolsGraph::RugPlot);
|
gData2->setPositionScatterStyle(JKQTPSingleColumnSymbolsGraph::RugPlot);
|
||||||
gData2->setDataColumn(randomdatacol2);
|
gData2->setDataColumn(randomdatacol2);
|
||||||
gData2->setTitle(d3_latex);
|
gData2->setTitle(d3_latex);
|
||||||
@ -71,7 +73,8 @@ JKQTPlotter* showPlot() {
|
|||||||
|
|
||||||
JKQTPSingleColumnSymbolsGraph* gData3;
|
JKQTPSingleColumnSymbolsGraph* gData3;
|
||||||
plot->addGraph(gData3=new JKQTPSingleColumnSymbolsGraph(plot));
|
plot->addGraph(gData3=new JKQTPSingleColumnSymbolsGraph(plot));
|
||||||
gData3->setPosition(10);
|
gData3->setPosition(15);
|
||||||
|
gData3->setWidth(0.5);
|
||||||
gData3->setPositionScatterStyle(JKQTPSingleColumnSymbolsGraph::RugPlot);
|
gData3->setPositionScatterStyle(JKQTPSingleColumnSymbolsGraph::RugPlot);
|
||||||
gData3->setDataColumn(randomdatacol3);
|
gData3->setDataColumn(randomdatacol3);
|
||||||
gData3->setTitle(d3_latex);
|
gData3->setTitle(d3_latex);
|
||||||
@ -89,7 +92,7 @@ JKQTPlotter* showPlot() {
|
|||||||
jkqtpstatEstimateKDEBandwidth(datastore1->begin(randomdatacol1), datastore1->end(randomdatacol1)));
|
jkqtpstatEstimateKDEBandwidth(datastore1->begin(randomdatacol1), datastore1->end(randomdatacol1)));
|
||||||
TGraph* gViol1;
|
TGraph* gViol1;
|
||||||
plot->addGraph(gViol1=new TGraph(plot));
|
plot->addGraph(gViol1=new TGraph(plot));
|
||||||
gViol1->setPos(2);
|
gViol1->setPos(7.5/2);
|
||||||
gViol1->setMin(jkqtpstatMinimum(datastore1->begin(randomdatacol1), datastore1->end(randomdatacol1)));
|
gViol1->setMin(jkqtpstatMinimum(datastore1->begin(randomdatacol1), datastore1->end(randomdatacol1)));
|
||||||
gViol1->setMax(jkqtpstatMaximum(datastore1->begin(randomdatacol1), datastore1->end(randomdatacol1)));
|
gViol1->setMax(jkqtpstatMaximum(datastore1->begin(randomdatacol1), datastore1->end(randomdatacol1)));
|
||||||
gViol1->setMean(jkqtpstatAverage(datastore1->begin(randomdatacol1), datastore1->end(randomdatacol1)));
|
gViol1->setMean(jkqtpstatAverage(datastore1->begin(randomdatacol1), datastore1->end(randomdatacol1)));
|
||||||
@ -99,16 +102,16 @@ JKQTPlotter* showPlot() {
|
|||||||
gViol1->setColor(gData1->getSymbolColor());
|
gViol1->setColor(gData1->getSymbolColor());
|
||||||
gViol1->setViolinStyle(JKQTPGraphViolinplotStyleMixin::SmoothViolin);
|
gViol1->setViolinStyle(JKQTPGraphViolinplotStyleMixin::SmoothViolin);
|
||||||
gViol1->setViolinPositionMode(pos);
|
gViol1->setViolinPositionMode(pos);
|
||||||
gViol1->setTitle("violin plot "+d1_latex);
|
gViol1->setTitle("violin "+d1_latex);
|
||||||
|
|
||||||
size_t cViol2Cat=datastore1->addColumn("violin 2, cat");
|
size_t cViol2Cat=datastore1->addColumn("violin 2, cat");
|
||||||
size_t cViol2Freq=datastore1->addColumn("violin 2, Histogram");
|
size_t cViol2Freq=datastore1->addColumn("violin 2, Histogram");
|
||||||
jkqtpstatHistogram1DAutoranged(datastore1->begin(randomdatacol2), datastore1->end(randomdatacol2),
|
jkqtpstatHistogram1DAutoranged(datastore1->begin(randomdatacol2), datastore1->end(randomdatacol2),
|
||||||
datastore1->backInserter(cViol2Cat), datastore1->backInserter(cViol2Freq),
|
datastore1->backInserter(cViol2Cat), datastore1->backInserter(cViol2Freq),
|
||||||
21, true, false, JKQTPStatHistogramBinXMode::XIsMid);
|
11, true, false, JKQTPStatHistogramBinXMode::XIsMid);
|
||||||
TGraph* gViol2;
|
TGraph* gViol2;
|
||||||
plot->addGraph(gViol2=new TGraph(plot));
|
plot->addGraph(gViol2=new TGraph(plot));
|
||||||
gViol2->setPos(7);
|
gViol2->setPos(7.5*1.5);
|
||||||
gViol2->setMin(jkqtpstatMinimum(datastore1->begin(randomdatacol2), datastore1->end(randomdatacol2)));
|
gViol2->setMin(jkqtpstatMinimum(datastore1->begin(randomdatacol2), datastore1->end(randomdatacol2)));
|
||||||
gViol2->setMax(jkqtpstatMaximum(datastore1->begin(randomdatacol2), datastore1->end(randomdatacol2)));
|
gViol2->setMax(jkqtpstatMaximum(datastore1->begin(randomdatacol2), datastore1->end(randomdatacol2)));
|
||||||
gViol2->setMean(jkqtpstatAverage(datastore1->begin(randomdatacol2), datastore1->end(randomdatacol2)));
|
gViol2->setMean(jkqtpstatAverage(datastore1->begin(randomdatacol2), datastore1->end(randomdatacol2)));
|
||||||
@ -118,16 +121,16 @@ JKQTPlotter* showPlot() {
|
|||||||
gViol2->setColor(gData2->getSymbolColor());
|
gViol2->setColor(gData2->getSymbolColor());
|
||||||
gViol2->setViolinStyle(JKQTPGraphViolinplotStyleMixin::StepViolin);
|
gViol2->setViolinStyle(JKQTPGraphViolinplotStyleMixin::StepViolin);
|
||||||
gViol2->setViolinPositionMode(pos);
|
gViol2->setViolinPositionMode(pos);
|
||||||
gViol2->setTitle("step violin plot "+d2_latex);
|
gViol2->setTitle("step violin "+d2_latex);
|
||||||
|
|
||||||
size_t cViol3Cat=datastore1->addColumn("violin 3, cat");
|
size_t cViol3Cat=datastore1->addColumn("violin 3, cat");
|
||||||
size_t cViol3Freq=datastore1->addColumn("violin 3, Histogram");
|
size_t cViol3Freq=datastore1->addColumn("violin 3, Histogram");
|
||||||
jkqtpstatHistogram1DAutoranged(datastore1->begin(randomdatacol3), datastore1->end(randomdatacol3),
|
jkqtpstatHistogram1DAutoranged(datastore1->begin(randomdatacol3), datastore1->end(randomdatacol3),
|
||||||
datastore1->backInserter(cViol3Cat), datastore1->backInserter(cViol3Freq),
|
datastore1->backInserter(cViol3Cat), datastore1->backInserter(cViol3Freq),
|
||||||
10, true, false, JKQTPStatHistogramBinXMode::XIsMid);
|
11, true, false, JKQTPStatHistogramBinXMode::XIsMid);
|
||||||
TGraph* gViol3;
|
TGraph* gViol3;
|
||||||
plot->addGraph(gViol3=new TGraph(plot));
|
plot->addGraph(gViol3=new TGraph(plot));
|
||||||
gViol3->setPos(12);
|
gViol3->setPos(7.5*2.5);
|
||||||
gViol3->setMin(jkqtpstatMinimum(datastore1->begin(randomdatacol3), datastore1->end(randomdatacol3)));
|
gViol3->setMin(jkqtpstatMinimum(datastore1->begin(randomdatacol3), datastore1->end(randomdatacol3)));
|
||||||
gViol3->setMax(jkqtpstatMaximum(datastore1->begin(randomdatacol3), datastore1->end(randomdatacol3)));
|
gViol3->setMax(jkqtpstatMaximum(datastore1->begin(randomdatacol3), datastore1->end(randomdatacol3)));
|
||||||
gViol3->setMean(jkqtpstatAverage(datastore1->begin(randomdatacol3), datastore1->end(randomdatacol3)));
|
gViol3->setMean(jkqtpstatAverage(datastore1->begin(randomdatacol3), datastore1->end(randomdatacol3)));
|
||||||
@ -137,7 +140,7 @@ JKQTPlotter* showPlot() {
|
|||||||
gViol3->setColor(gData3->getSymbolColor());
|
gViol3->setColor(gData3->getSymbolColor());
|
||||||
gViol3->setViolinStyle(JKQTPGraphViolinplotStyleMixin::BoxViolin);
|
gViol3->setViolinStyle(JKQTPGraphViolinplotStyleMixin::BoxViolin);
|
||||||
gViol3->setViolinPositionMode(pos);
|
gViol3->setViolinPositionMode(pos);
|
||||||
gViol3->setTitle("box violin plot "+d3_latex);
|
gViol3->setTitle("box violin "+d3_latex);
|
||||||
|
|
||||||
// Note that there also exist "adapters" that allow to draw violin plots in one line of code:
|
// Note that there also exist "adapters" that allow to draw violin plots in one line of code:
|
||||||
/*jkqtpstatAddVViolinplotHistogramAndOutliers(plot->getPlotter(), datastore1->begin(randomdatacol1), datastore1->end(randomdatacol1), -5);
|
/*jkqtpstatAddVViolinplotHistogramAndOutliers(plot->getPlotter(), datastore1->begin(randomdatacol1), datastore1->end(randomdatacol1), -5);
|
||||||
@ -157,8 +160,9 @@ JKQTPlotter* showPlot() {
|
|||||||
plot->getPlotter()->setGridColor(QColor(230,230,230));
|
plot->getPlotter()->setGridColor(QColor(230,230,230));
|
||||||
|
|
||||||
// show plotter and make it a decent size
|
// show plotter and make it a decent size
|
||||||
|
plot->setWindowTitle(title);
|
||||||
plot->show();
|
plot->show();
|
||||||
plot->resize(600,400);
|
plot->resize(500,450);
|
||||||
|
|
||||||
return plot;
|
return plot;
|
||||||
}
|
}
|
||||||
@ -170,8 +174,11 @@ int main(int argc, char* argv[])
|
|||||||
JKQTPExampleApplication app(argc, argv);
|
JKQTPExampleApplication app(argc, argv);
|
||||||
|
|
||||||
|
|
||||||
showPlot<JKQTPViolinplotHorizontalElement,JKQTPSingleColumnSymbolsGraph::DataDirection::X>();
|
JKQTPlotter* plot1=showPlot<JKQTPViolinplotHorizontalElement,JKQTPSingleColumnSymbolsGraph::DataDirection::X>("1: JKQTPViolinplotHorizontalElement");
|
||||||
showPlot<JKQTPViolinplotVerticalElement,JKQTPSingleColumnSymbolsGraph::DataDirection::Y>();
|
//plot1->resize(500,450);
|
||||||
|
plot1->getPlotter()->setKeyPosition(JKQTPKeyInsideTopLeft);
|
||||||
|
JKQTPlotter* plot2=showPlot<JKQTPViolinplotVerticalElement,JKQTPSingleColumnSymbolsGraph::DataDirection::Y>("2: JKQTPViolinplotVerticalElement");
|
||||||
|
|
||||||
|
|
||||||
return app.exec();
|
return app.exec();
|
||||||
}
|
}
|
||||||
|
@ -72,8 +72,9 @@ void drawRandomWalkX(JKQTPlotter& plot) {
|
|||||||
plot.zoomToFit();
|
plot.zoomToFit();
|
||||||
|
|
||||||
// 11. show plotter and make it a decent size
|
// 11. show plotter and make it a decent size
|
||||||
|
plot.setWindowTitle("1: JKQTPFilledCurveXGraph wiggle plot");
|
||||||
plot.show();
|
plot.show();
|
||||||
plot.resize(600,400);
|
plot.resize(500,350);
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawWavepacketsY(JKQTPlotter& plot) {
|
void drawWavepacketsY(JKQTPlotter& plot) {
|
||||||
@ -112,7 +113,7 @@ void drawWavepacketsY(JKQTPlotter& plot) {
|
|||||||
graph->setYColumn(columnT); graph->setXColumn(columnPacket);
|
graph->setYColumn(columnT); graph->setXColumn(columnPacket);
|
||||||
|
|
||||||
// enable wiggle-plot filling
|
// enable wiggle-plot filling
|
||||||
graph->setFillMode(JKQTPFilledCurveXGraph::TwoColorFilling);
|
graph->setFillMode(JKQTPFilledCurveYGraph::TwoColorFilling);
|
||||||
// draw the data also as a black, thin line
|
// draw the data also as a black, thin line
|
||||||
graph->setLineColor(QColor("black"));
|
graph->setLineColor(QColor("black"));
|
||||||
graph->setLineWidth(1);
|
graph->setLineWidth(1);
|
||||||
@ -137,8 +138,9 @@ void drawWavepacketsY(JKQTPlotter& plot) {
|
|||||||
plot.zoomToFit();
|
plot.zoomToFit();
|
||||||
|
|
||||||
// 5. show plotter and make it a decent size
|
// 5. show plotter and make it a decent size
|
||||||
|
plot.setWindowTitle("1: JKQTPFilledCurveYGraph wiggle plot");
|
||||||
plot.show();
|
plot.show();
|
||||||
plot.resize(600,600);
|
plot.resize(500,500);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char* argv[])
|
int main(int argc, char* argv[])
|
||||||
|
@ -40,17 +40,17 @@
|
|||||||
|
|
||||||
\image html bargraph_basics.png
|
\image html bargraph_basics.png
|
||||||
|
|
||||||
By default the sift parameter is, so the bar is centered at the x-value. The width is 0.9,
|
By default the shift parameter is, so the bar is centered at the x-value. The width is 0.9,
|
||||||
so adjacent bars are plotted with a small distance between them. It is possible to use these two parameters
|
so adjacent bars are plotted with a small distance between them. It is possible to use these two parameters
|
||||||
to plot multiple bars for every x-value, by having on JKQTPSpecialLineHorizontalGraph object per
|
to plot multiple bars for every x-value, by having on JKQTPSpecialLineHorizontalGraph object per
|
||||||
set of bars that belong together. For example for three bars per x-value one would set:
|
set of bars that belong together. For example for three bars per x-value one would set:
|
||||||
\verbatim
|
\verbatim
|
||||||
widthoverride.3
|
width=0.3
|
||||||
shift=-0.3 / 0 / +0.3
|
shift=-0.3 / 0 / +0.3
|
||||||
\endverbatim
|
\endverbatim
|
||||||
This results in a bargraph, as shown here:
|
This results in a bargraph, as shown here:
|
||||||
|
|
||||||
\image html plot_bargraphverplot.png
|
\image html JKQTPBarVerticalGraph.png
|
||||||
|
|
||||||
|
|
||||||
You can use JKQTPlotter::addHorizontalBargraph() to add a series of bargraphs, where the width and shift are determined
|
You can use JKQTPlotter::addHorizontalBargraph() to add a series of bargraphs, where the width and shift are determined
|
||||||
@ -162,7 +162,7 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPBarVerticalErrorGraph: public JKQTPBarVertical
|
|||||||
|
|
||||||
This works much the same as JKQTPBarHorizontalGraph. Here is an example output:
|
This works much the same as JKQTPBarHorizontalGraph. Here is an example output:
|
||||||
|
|
||||||
\image html plot_bargraphhorplot.png
|
\image html JKQTPBarHorizontalGraph.png
|
||||||
|
|
||||||
|
|
||||||
\see \ref JKQTPlotterBarcharts, jkqtpstatAddVHistogram1D(), jkqtpstatAddVHistogram1DAutoranged()
|
\see \ref JKQTPlotterBarcharts, jkqtpstatAddVHistogram1D(), jkqtpstatAddVHistogram1DAutoranged()
|
||||||
|
@ -48,7 +48,7 @@
|
|||||||
* \endverbatim
|
* \endverbatim
|
||||||
* This results in a bargraph, as shown here:
|
* This results in a bargraph, as shown here:
|
||||||
*
|
*
|
||||||
* \image html plot_bargraphverplot.png
|
* \image html JKQTPBarVerticalGraph.png
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
|
@ -62,7 +62,7 @@
|
|||||||
*
|
*
|
||||||
* \author Sebastian Isbaner (2013-2014) & Jan Krieger (2019)
|
* \author Sebastian Isbaner (2013-2014) & Jan Krieger (2019)
|
||||||
*
|
*
|
||||||
* \image html JKQTPContour.png
|
* \image html JKQTPColumnContourPlot.png
|
||||||
*
|
*
|
||||||
* \image html contourplot.png
|
* \image html contourplot.png
|
||||||
*
|
*
|
||||||
|
@ -137,7 +137,7 @@ typedef std::function<QPointF(double)> jkqtpSimpleParametricCurveFunctionType;
|
|||||||
*
|
*
|
||||||
* The following image shows a Lissajou's fugure drawn with this function
|
* The following image shows a Lissajou's fugure drawn with this function
|
||||||
*
|
*
|
||||||
* \image html plot_evalcurve.png
|
* \image html JKQTPXYFunctionLineGraph.png
|
||||||
*
|
*
|
||||||
* The source code for this example is:
|
* The source code for this example is:
|
||||||
* \code
|
* \code
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
*
|
*
|
||||||
* \image html filledgraphs.png
|
* \image html filledgraphs.png
|
||||||
*
|
*
|
||||||
|
*
|
||||||
* \see JKQTPFilledCurveXGraph, JKQTPFilledCurveYGraph
|
* \see JKQTPFilledCurveXGraph, JKQTPFilledCurveYGraph
|
||||||
*/
|
*/
|
||||||
class JKQTPLOTTER_LIB_EXPORT JKQTPFilledCurveGraphBase: public JKQTPXYBaselineGraph, public JKQTPGraphLineAndFillStyleMixin {
|
class JKQTPLOTTER_LIB_EXPORT JKQTPFilledCurveGraphBase: public JKQTPXYBaselineGraph, public JKQTPGraphLineAndFillStyleMixin {
|
||||||
@ -81,7 +82,7 @@ protected:
|
|||||||
/*! \brief This implements filled curve plots where the area is filled between the plot line and the x-Axis.
|
/*! \brief This implements filled curve plots where the area is filled between the plot line and the x-Axis.
|
||||||
\ingroup jkqtplotter_filledgraphs
|
\ingroup jkqtplotter_filledgraphs
|
||||||
|
|
||||||
\image html filledgraphs.png
|
\image html JKQTPFilledCurveXGraph.png
|
||||||
|
|
||||||
\see \ref JKQTPlotterFilledGraphs
|
\see \ref JKQTPlotterFilledGraphs
|
||||||
|
|
||||||
@ -89,7 +90,7 @@ protected:
|
|||||||
Such plots are sometimes called "Wiggle Plots" and are often used (in their black/white-variety for seismographic
|
Such plots are sometimes called "Wiggle Plots" and are often used (in their black/white-variety for seismographic
|
||||||
data plotting.
|
data plotting.
|
||||||
|
|
||||||
\image html wiggleplot_x.png
|
* \image html JKQTPFilledCurveXGraph_wiggle.png
|
||||||
|
|
||||||
To generate such a plot, used \c JKQTPFilledCurveXGraph::setFillMode(JKQTPFilledCurveXGraph::FillMode::TwoColorFilling)
|
To generate such a plot, used \c JKQTPFilledCurveXGraph::setFillMode(JKQTPFilledCurveXGraph::FillMode::TwoColorFilling)
|
||||||
and then use \c JKQTPFilledCurveXGraph::fillStyleBelow() to access the fill style for the area below the baseline
|
and then use \c JKQTPFilledCurveXGraph::fillStyleBelow() to access the fill style for the area below the baseline
|
||||||
@ -143,7 +144,7 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPFilledCurveXErrorGraph: public JKQTPFilledCurv
|
|||||||
/*! \brief This implements filled curve plots where the area is filled between the plot line and y-Axis
|
/*! \brief This implements filled curve plots where the area is filled between the plot line and y-Axis
|
||||||
\ingroup jkqtplotter_filledgraphs
|
\ingroup jkqtplotter_filledgraphs
|
||||||
|
|
||||||
\image html filledgraphs_yaxis.png
|
\image html JKQTPFilledCurveYGraph.png
|
||||||
|
|
||||||
\see \ref JKQTPlotterFilledGraphs
|
\see \ref JKQTPlotterFilledGraphs
|
||||||
|
|
||||||
@ -151,7 +152,7 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPFilledCurveXErrorGraph: public JKQTPFilledCurv
|
|||||||
Such plots are sometimes called "Wiggle Plots" and are often used (in their black/white-variety for seismographic
|
Such plots are sometimes called "Wiggle Plots" and are often used (in their black/white-variety for seismographic
|
||||||
data plotting.
|
data plotting.
|
||||||
|
|
||||||
\image html wiggleplot_y.png
|
* \image html JKQTPFilledCurveYGraph_wiggle.png
|
||||||
|
|
||||||
To generate such a plot, used \c JKQTPFilledCurveXGraph::setFillMode(JKQTPFilledCurveXGraph::FillMode::TwoColorFilling)
|
To generate such a plot, used \c JKQTPFilledCurveXGraph::setFillMode(JKQTPFilledCurveXGraph::FillMode::TwoColorFilling)
|
||||||
and then use \c JKQTPFilledCurveXGraph::fillStyleBelow() to access the fill style for the area below the baseline
|
and then use \c JKQTPFilledCurveXGraph::fillStyleBelow() to access the fill style for the area below the baseline
|
||||||
|
@ -49,7 +49,7 @@ class JKQTPDatastore;
|
|||||||
/*! \brief This implements xy line plots. This also alows to draw symbols at the data points.
|
/*! \brief This implements xy line plots. This also alows to draw symbols at the data points.
|
||||||
\ingroup jkqtplotter_linesymbolgraphs_simple
|
\ingroup jkqtplotter_linesymbolgraphs_simple
|
||||||
|
|
||||||
\image html plot_lineplots.png
|
\image html JKQTPXYLineGraph.png
|
||||||
|
|
||||||
\note This classes can (and does by default) apply a line-compression strategy that improves plotting speed
|
\note This classes can (and does by default) apply a line-compression strategy that improves plotting speed
|
||||||
but reduces accuracy a bit. See JKQTPGraphLinesCompressionMixin for details.
|
but reduces accuracy a bit. See JKQTPGraphLinesCompressionMixin for details.
|
||||||
|
@ -48,7 +48,7 @@ class JKQTPDatastore;
|
|||||||
/*! \brief This implements xy scatter plots. This also alows to draw symbols at the data points.
|
/*! \brief This implements xy scatter plots. This also alows to draw symbols at the data points.
|
||||||
\ingroup jkqtplotter_linesymbolgraphs_simple
|
\ingroup jkqtplotter_linesymbolgraphs_simple
|
||||||
|
|
||||||
\image html plot_scatterplots.png
|
\image html JKQTPXYScatterGraph.png
|
||||||
|
|
||||||
\note This classes can (and does by default) apply a line-compression strategy that improves plotting speed
|
\note This classes can (and does by default) apply a line-compression strategy that improves plotting speed
|
||||||
but reduces accuracy a bit. See JKQTPGraphLinesCompressionMixin for details.
|
but reduces accuracy a bit. See JKQTPGraphLinesCompressionMixin for details.
|
||||||
|
@ -240,7 +240,7 @@ class JKQTPLOTTER_LIB_EXPORT JKQTPPaintDeviceAdapter {
|
|||||||
*
|
*
|
||||||
* Often a single plot is not sufficient, but several plots need to be aligned with respect to each other:
|
* Often a single plot is not sufficient, but several plots need to be aligned with respect to each other:
|
||||||
*
|
*
|
||||||
* \image html test_multiplot.png
|
* \image html multiplot.png
|
||||||
*
|
*
|
||||||
* This can be achieved by putting several JKQTPlotter instances into a
|
* This can be achieved by putting several JKQTPlotter instances into a
|
||||||
* <a href="http://doc.qt.io/qt-5/layout.html">Qt Layout</a>. Then you can fill each plot differently and
|
* <a href="http://doc.qt.io/qt-5/layout.html">Qt Layout</a>. Then you can fill each plot differently and
|
||||||
|
Before Width: | Height: | Size: 9.4 KiB |
Before Width: | Height: | Size: 9.1 KiB |
Before Width: | Height: | Size: 204 KiB After Width: | Height: | Size: 133 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 17 KiB |