added more examples and explanations for image plots, fixed some bugs in large example/test
@ -26,7 +26,9 @@ 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/jkqtplotter_simpletest_imageplot_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/jkqtplotter_simpletest_imageplot) | [1-channel Raw C Image Plot](https://github.com/jkriege2/JKQtPlotter/tree/master/test/jkqtplotter_simpletest_imageplot) | `JKQTPColumnMathImage`<br/>image data copied from C-style row-major array into a single column of the internal datastore |
|
| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_imageplot_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/jkqtplotter_simpletest_imageplot) | [Basic 1-channel Raw C Image Plot](https://github.com/jkriege2/JKQtPlotter/tree/master/test/jkqtplotter_simpletest_imageplot) | `JKQTPColumnMathImage`<br/>image data copied from C-style row-major array into a single column of the internal datastore<br>Describes several options of the image plotting classes (different ways of color coding, what to do with data above/below the limits etc.) |
|
||||||
|
| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_imageplot_modifier_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/jkqtplotter_simpletest_imageplot_modifier) | [Modifier-Feature of Image Plots](https://github.com/jkriege2/JKQtPlotter/tree/master/test/jkqtplotter_simpletest_imageplot_modifier) | `JKQTPColumnMathImage`<br/>image data copied from C-style row-major array into a single column of the internal datastore<br>Image is modified by a second image to display two data dimensions at the same time |
|
||||||
|
| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_imageplot_nodatastore_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/jkqtplotter_simpletest_imageplot_nodatastore) | [Basic 1-channel Raw C Image Plot<br>without the internal datastore](https://github.com/jkriege2/JKQtPlotter/tree/master/test/jkqtplotter_simpletest_imageplot_nodatastore) | `JKQTPMathImage`<br/>image data in a C-style row-major array, not using internal datastore |
|
||||||
| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_imageplot_opencv_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/jkqtplotter_simpletest_imageplot_opencv) | [1-channel OpenCV cv::Mat Image Plot](https://github.com/jkriege2/JKQtPlotter/tree/master/test/jkqtplotter_simpletest_imageplot_opencv) | `JKQTPColumnMathImage`<br/>image data copied from OpenCV cv::Mat-structure into a single column of the internal datastore |
|
| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_imageplot_opencv_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/jkqtplotter_simpletest_imageplot_opencv) | [1-channel OpenCV cv::Mat Image Plot](https://github.com/jkriege2/JKQtPlotter/tree/master/test/jkqtplotter_simpletest_imageplot_opencv) | `JKQTPColumnMathImage`<br/>image data copied from OpenCV cv::Mat-structure into a single column of the internal datastore |
|
||||||
| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_rgbimageplot_opencv_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/jkqtplotter_simpletest_rgbimageplot_opencv) | [RGB OpenCV cv::Mat Image Plot](https://github.com/jkriege2/JKQtPlotter/tree/master/test/jkqtplotter_simpletest_rgbimageplot_opencv) | `JKQTPColumnRGBMathImage`<br/>image data copied from OpenCV cv::Mat-structure into three columns of the internal datastore |
|
| [![](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_rgbimageplot_opencv_small.png)](https://github.com/jkriege2/JKQtPlotter/tree/master/test/jkqtplotter_simpletest_rgbimageplot_opencv) | [RGB OpenCV cv::Mat Image Plot](https://github.com/jkriege2/JKQtPlotter/tree/master/test/jkqtplotter_simpletest_rgbimageplot_opencv) | `JKQTPColumnRGBMathImage`<br/>image data copied from OpenCV cv::Mat-structure into three columns of the internal datastore |
|
||||||
|
|
||||||
|
@ -302,18 +302,18 @@ class LIB_EXPORT JKQTPMathImage: public JKQTPMathImageBase {
|
|||||||
static QIcon getPaletteIcon(int i) ;
|
static QIcon getPaletteIcon(int i) ;
|
||||||
/*! \brief get QIcon representing the given palette */
|
/*! \brief get QIcon representing the given palette */
|
||||||
static QIcon getPaletteIcon(JKQTPMathImageColorPalette palette) ;
|
static QIcon getPaletteIcon(JKQTPMathImageColorPalette palette) ;
|
||||||
/*! \brief get QIcon representing the given palette */
|
/*! \brief get QImage representing the given palette */
|
||||||
static QImage getPaletteImage(int i, int width, int height=1) ;
|
static QImage getPaletteImage(int i, int width, int height=1) ;
|
||||||
/*! \brief get QIcon representing the given palette */
|
/*! \brief get QImage representing the given palette */
|
||||||
static QImage getPaletteImage(JKQTPMathImageColorPalette palette, int width, int height=1) ;
|
static QImage getPaletteImage(JKQTPMathImageColorPalette palette, int width, int height=1) ;
|
||||||
|
|
||||||
/*! \brief get QIcon representing the given palette */
|
/*! \brief get QIcon representing the given palette */
|
||||||
static QIcon getPaletteKeyIcon(int i) ;
|
static QIcon getPaletteKeyIcon(int i) ;
|
||||||
/*! \brief get QIcon representing the given palette */
|
/*! \brief get QIcon representing the given palette */
|
||||||
static QIcon getPaletteKeyIcon(JKQTPMathImageColorPalette palette) ;
|
static QIcon getPaletteKeyIcon(JKQTPMathImageColorPalette palette) ;
|
||||||
/*! \brief get QIcon representing the given palette */
|
/*! \brief get QImage representing the given palette */
|
||||||
static QImage getPaletteKeyImage(int i, int width, int height) ;
|
static QImage getPaletteKeyImage(int i, int width, int height) ;
|
||||||
/*! \brief get QIcon representing the given palette */
|
/*! \brief get QImage representing the given palette */
|
||||||
static QImage getPaletteKeyImage(JKQTPMathImageColorPalette palette, int width, int height) ;
|
static QImage getPaletteKeyImage(JKQTPMathImageColorPalette palette, int width, int height) ;
|
||||||
|
|
||||||
|
|
||||||
|
BIN
screenshots/jkqtplotter_simpletest_imageplot__scale02.png
Normal file
After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 27 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 26 KiB |
BIN
screenshots/jkqtplotter_simpletest_imageplot_modifier.png
Normal file
After Width: | Height: | Size: 71 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 7.1 KiB |
BIN
screenshots/jkqtplotter_simpletest_imageplot_nodatastore.png
Normal file
After Width: | Height: | Size: 46 KiB |
After Width: | Height: | Size: 17 KiB |
@ -3,7 +3,7 @@
|
|||||||
#include <QDate>
|
#include <QDate>
|
||||||
#include <QDateTime>
|
#include <QDateTime>
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include "jkqtpbarchartelements.h"
|
#include "jkqtplotter/jkqtpbarchartelements.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,14 +10,14 @@
|
|||||||
#include <QTabWidget>
|
#include <QTabWidget>
|
||||||
#include <QFormLayout>
|
#include <QFormLayout>
|
||||||
#include <QCheckBox>
|
#include <QCheckBox>
|
||||||
#include "../../jkqtplotter.h"
|
#include "jkqtplotter/jkqtplotter.h"
|
||||||
#include "../../jkqtpgeoelements.h"
|
#include "jkqtplotter/jkqtpgeoelements.h"
|
||||||
#include "../../jkqtpimageelements.h"
|
#include "jkqtplotter/jkqtpimageelements.h"
|
||||||
#include "../../jkqtpoverlayelements.h"
|
#include "jkqtplotter/jkqtpoverlayelements.h"
|
||||||
#include "../../jkqtpparsedfunctionelements.h"
|
#include "jkqtplotter/jkqtpparsedfunctionelements.h"
|
||||||
#include "../../jkqtpbaseelements.h"
|
#include "jkqtplotter/jkqtpbaseelements.h"
|
||||||
#include "../../jkqtpplotsmodel.h"
|
#include "jkqtplotter/jkqtpplotsmodel.h"
|
||||||
#include "../../jkqtptools.h"
|
#include "jkqtplottertools/jkqtptools.h"
|
||||||
|
|
||||||
#define N1 200
|
#define N1 200
|
||||||
#define N2 50
|
#define N2 50
|
||||||
|
@ -10,14 +10,14 @@
|
|||||||
#include <QTabWidget>
|
#include <QTabWidget>
|
||||||
#include <QFormLayout>
|
#include <QFormLayout>
|
||||||
#include <QCheckBox>
|
#include <QCheckBox>
|
||||||
#include "../../jkqtplotter.h"
|
#include "jkqtplotter/jkqtplotter.h"
|
||||||
#include "../../jkqtpgeoelements.h"
|
#include "jkqtplotter/jkqtpgeoelements.h"
|
||||||
#include "../../jkqtpimageelements.h"
|
#include "jkqtplotter/jkqtpimageelements.h"
|
||||||
#include "../../jkqtpoverlayelements.h"
|
#include "jkqtplotter/jkqtpoverlayelements.h"
|
||||||
#include "../../jkqtpparsedfunctionelements.h"
|
#include "jkqtplotter/jkqtpparsedfunctionelements.h"
|
||||||
#include "../../jkqtpbaseelements.h"
|
#include "jkqtplotter/jkqtpbaseelements.h"
|
||||||
#include "../../jkqtpplotsmodel.h"
|
#include "jkqtplotter/jkqtpplotsmodel.h"
|
||||||
#include "../../jkqtptools.h"
|
#include "jkqtplottertools/jkqtptools.h"
|
||||||
|
|
||||||
#define N1 200
|
#define N1 200
|
||||||
#define N2 50
|
#define N2 50
|
||||||
|
@ -10,14 +10,14 @@
|
|||||||
#include <QTabWidget>
|
#include <QTabWidget>
|
||||||
#include <QFormLayout>
|
#include <QFormLayout>
|
||||||
#include <QCheckBox>
|
#include <QCheckBox>
|
||||||
#include "../../jkqtplotter.h"
|
#include "jkqtplotter/jkqtplotter.h"
|
||||||
#include "../../jkqtpgeoelements.h"
|
#include "jkqtplotter/jkqtpgeoelements.h"
|
||||||
#include "../../jkqtpimageelements.h"
|
#include "jkqtplotter/jkqtpimageelements.h"
|
||||||
#include "../../jkqtpoverlayelements.h"
|
#include "jkqtplotter/jkqtpoverlayelements.h"
|
||||||
#include "../../jkqtpparsedfunctionelements.h"
|
#include "jkqtplotter/jkqtpparsedfunctionelements.h"
|
||||||
#include "../../jkqtpbaseelements.h"
|
#include "jkqtplotter/jkqtpbaseelements.h"
|
||||||
#include "../../jkqtpplotsmodel.h"
|
#include "jkqtplotter/jkqtpplotsmodel.h"
|
||||||
#include "../../jkqtptools.h"
|
#include "jkqtplottertools/jkqtptools.h"
|
||||||
|
|
||||||
#define N1 200
|
#define N1 200
|
||||||
#define N2 50
|
#define N2 50
|
||||||
|
@ -10,14 +10,14 @@
|
|||||||
#include <QTabWidget>
|
#include <QTabWidget>
|
||||||
#include <QFormLayout>
|
#include <QFormLayout>
|
||||||
#include <QCheckBox>
|
#include <QCheckBox>
|
||||||
#include "../../jkqtplotter.h"
|
#include "jkqtplotter/jkqtplotter.h"
|
||||||
#include "../../jkqtpgeoelements.h"
|
#include "jkqtplotter/jkqtpgeoelements.h"
|
||||||
#include "../../jkqtpimageelements.h"
|
#include "jkqtplotter/jkqtpimageelements.h"
|
||||||
#include "../../jkqtpoverlayelements.h"
|
#include "jkqtplotter/jkqtpoverlayelements.h"
|
||||||
#include "../../jkqtpparsedfunctionelements.h"
|
#include "jkqtplotter/jkqtpparsedfunctionelements.h"
|
||||||
#include "../../jkqtpbaseelements.h"
|
#include "jkqtplotter/jkqtpbaseelements.h"
|
||||||
#include "../../jkqtpplotsmodel.h"
|
#include "jkqtplotter/jkqtpplotsmodel.h"
|
||||||
#include "../../jkqtptools.h"
|
#include "jkqtplottertools/jkqtptools.h"
|
||||||
|
|
||||||
#define N1 200
|
#define N1 200
|
||||||
#define N2 50
|
#define N2 50
|
||||||
|
@ -10,14 +10,14 @@
|
|||||||
#include <QTabWidget>
|
#include <QTabWidget>
|
||||||
#include <QFormLayout>
|
#include <QFormLayout>
|
||||||
#include <QCheckBox>
|
#include <QCheckBox>
|
||||||
#include "../../jkqtplotter.h"
|
#include "jkqtplotter/jkqtplotter.h"
|
||||||
#include "../../jkqtpgeoelements.h"
|
#include "jkqtplotter/jkqtpgeoelements.h"
|
||||||
#include "../../jkqtpimageelements.h"
|
#include "jkqtplotter/jkqtpimageelements.h"
|
||||||
#include "../../jkqtpoverlayelements.h"
|
#include "jkqtplotter/jkqtpoverlayelements.h"
|
||||||
#include "../../jkqtpparsedfunctionelements.h"
|
#include "jkqtplotter/jkqtpparsedfunctionelements.h"
|
||||||
#include "../../jkqtpbaseelements.h"
|
#include "jkqtplotter/jkqtpbaseelements.h"
|
||||||
#include "../../jkqtpplotsmodel.h"
|
#include "jkqtplotter/jkqtpplotsmodel.h"
|
||||||
#include "../../jkqtptools.h"
|
#include "jkqtplottertools/jkqtptools.h"
|
||||||
|
|
||||||
#define N1 200
|
#define N1 200
|
||||||
#define N2 50
|
#define N2 50
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#include <QDate>
|
#include <QDate>
|
||||||
#include <QDateTime>
|
#include <QDateTime>
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include "jkqtpboxplotelements.h"
|
#include "jkqtplotter/jkqtpboxplotelements.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,14 +10,14 @@
|
|||||||
#include <QTabWidget>
|
#include <QTabWidget>
|
||||||
#include <QFormLayout>
|
#include <QFormLayout>
|
||||||
#include <QCheckBox>
|
#include <QCheckBox>
|
||||||
#include "../../jkqtplotter.h"
|
#include "jkqtplotter/jkqtplotter.h"
|
||||||
#include "../../jkqtpgeoelements.h"
|
#include "jkqtplotter/jkqtpgeoelements.h"
|
||||||
#include "../../jkqtpimageelements.h"
|
#include "jkqtplotter/jkqtpimageelements.h"
|
||||||
#include "../../jkqtpoverlayelements.h"
|
#include "jkqtplotter/jkqtpoverlayelements.h"
|
||||||
#include "../../jkqtpparsedfunctionelements.h"
|
#include "jkqtplotter/jkqtpparsedfunctionelements.h"
|
||||||
#include "../../jkqtpbaseelements.h"
|
#include "jkqtplotter/jkqtpbaseelements.h"
|
||||||
#include "../../jkqtpplotsmodel.h"
|
#include "jkqtplotter/jkqtpplotsmodel.h"
|
||||||
#include "../../jkqtptools.h"
|
#include "jkqtplottertools/jkqtptools.h"
|
||||||
|
|
||||||
#define N1 200
|
#define N1 200
|
||||||
#define N2 50
|
#define N2 50
|
||||||
|
@ -10,14 +10,14 @@
|
|||||||
#include <QTabWidget>
|
#include <QTabWidget>
|
||||||
#include <QFormLayout>
|
#include <QFormLayout>
|
||||||
#include <QCheckBox>
|
#include <QCheckBox>
|
||||||
#include "../../jkqtplotter.h"
|
#include "jkqtplotter/jkqtplotter.h"
|
||||||
#include "../../jkqtpgeoelements.h"
|
#include "jkqtplotter/jkqtpgeoelements.h"
|
||||||
#include "../../jkqtpimageelements.h"
|
#include "jkqtplotter/jkqtpimageelements.h"
|
||||||
#include "../../jkqtpoverlayelements.h"
|
#include "jkqtplotter/jkqtpoverlayelements.h"
|
||||||
#include "../../jkqtpparsedfunctionelements.h"
|
#include "jkqtplotter/jkqtpparsedfunctionelements.h"
|
||||||
#include "../../jkqtpbaseelements.h"
|
#include "jkqtplotter/jkqtpbaseelements.h"
|
||||||
#include "../../jkqtpplotsmodel.h"
|
#include "jkqtplotter/jkqtpplotsmodel.h"
|
||||||
#include "../../jkqtptools.h"
|
#include "jkqtplottertools/jkqtptools.h"
|
||||||
|
|
||||||
#define N1 200
|
#define N1 200
|
||||||
#define N2 50
|
#define N2 50
|
||||||
|
@ -10,14 +10,14 @@
|
|||||||
#include <QTabWidget>
|
#include <QTabWidget>
|
||||||
#include <QFormLayout>
|
#include <QFormLayout>
|
||||||
#include <QCheckBox>
|
#include <QCheckBox>
|
||||||
#include "../../jkqtplotter.h"
|
#include "jkqtplotter/jkqtplotter.h"
|
||||||
#include "../../jkqtpgeoelements.h"
|
#include "jkqtplotter/jkqtpgeoelements.h"
|
||||||
#include "../../jkqtpimageelements.h"
|
#include "jkqtplotter/jkqtpimageelements.h"
|
||||||
#include "../../jkqtpoverlayelements.h"
|
#include "jkqtplotter/jkqtpoverlayelements.h"
|
||||||
#include "../../jkqtpparsedfunctionelements.h"
|
#include "jkqtplotter/jkqtpparsedfunctionelements.h"
|
||||||
#include "../../jkqtpbaseelements.h"
|
#include "jkqtplotter/jkqtpbaseelements.h"
|
||||||
#include "../../jkqtpplotsmodel.h"
|
#include "jkqtplotter/jkqtpplotsmodel.h"
|
||||||
#include "../../jkqtptools.h"
|
#include "jkqtplottertools/jkqtptools.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,14 +10,14 @@
|
|||||||
#include <QTabWidget>
|
#include <QTabWidget>
|
||||||
#include <QFormLayout>
|
#include <QFormLayout>
|
||||||
#include <QCheckBox>
|
#include <QCheckBox>
|
||||||
#include "../../jkqtplotter.h"
|
#include "jkqtplotter/jkqtplotter.h"
|
||||||
#include "../../jkqtpgeoelements.h"
|
#include "jkqtplotter/jkqtpgeoelements.h"
|
||||||
#include "../../jkqtpimageelements.h"
|
#include "jkqtplotter/jkqtpimageelements.h"
|
||||||
#include "../../jkqtpoverlayelements.h"
|
#include "jkqtplotter/jkqtpoverlayelements.h"
|
||||||
#include "../../jkqtpparsedfunctionelements.h"
|
#include "jkqtplotter/jkqtpparsedfunctionelements.h"
|
||||||
#include "../../jkqtpbaseelements.h"
|
#include "jkqtplotter/jkqtpbaseelements.h"
|
||||||
#include "../../jkqtpplotsmodel.h"
|
#include "jkqtplotter/jkqtpplotsmodel.h"
|
||||||
#include "../../jkqtptools.h"
|
#include "jkqtplottertools/jkqtptools.h"
|
||||||
|
|
||||||
#define N1 200
|
#define N1 200
|
||||||
#define N2 50
|
#define N2 50
|
||||||
|
@ -10,14 +10,14 @@
|
|||||||
#include <QTabWidget>
|
#include <QTabWidget>
|
||||||
#include <QFormLayout>
|
#include <QFormLayout>
|
||||||
#include <QCheckBox>
|
#include <QCheckBox>
|
||||||
#include "../../jkqtplotter.h"
|
#include "jkqtplotter/jkqtplotter.h"
|
||||||
#include "../../jkqtpgeoelements.h"
|
#include "jkqtplotter/jkqtpgeoelements.h"
|
||||||
#include "../../jkqtpimageelements.h"
|
#include "jkqtplotter/jkqtpimageelements.h"
|
||||||
#include "../../jkqtpoverlayelements.h"
|
#include "jkqtplotter/jkqtpoverlayelements.h"
|
||||||
#include "../../jkqtpparsedfunctionelements.h"
|
#include "jkqtplotter/jkqtpparsedfunctionelements.h"
|
||||||
#include "../../jkqtpbaseelements.h"
|
#include "jkqtplotter/jkqtpbaseelements.h"
|
||||||
#include "../../jkqtpplotsmodel.h"
|
#include "jkqtplotter/jkqtpplotsmodel.h"
|
||||||
#include "../../jkqtptools.h"
|
#include "jkqtplottertools/jkqtptools.h"
|
||||||
|
|
||||||
#define N1 200
|
#define N1 200
|
||||||
#define N2 50
|
#define N2 50
|
||||||
|
@ -10,14 +10,14 @@
|
|||||||
#include <QTabWidget>
|
#include <QTabWidget>
|
||||||
#include <QFormLayout>
|
#include <QFormLayout>
|
||||||
#include <QCheckBox>
|
#include <QCheckBox>
|
||||||
#include "../../jkqtplotter.h"
|
#include "jkqtplotter/jkqtplotter.h"
|
||||||
#include "../../jkqtpgeoelements.h"
|
#include "jkqtplotter/jkqtpgeoelements.h"
|
||||||
#include "../../jkqtpimageelements.h"
|
#include "jkqtplotter/jkqtpimageelements.h"
|
||||||
#include "../../jkqtpoverlayelements.h"
|
#include "jkqtplotter/jkqtpoverlayelements.h"
|
||||||
#include "../../jkqtpparsedfunctionelements.h"
|
#include "jkqtplotter/jkqtpparsedfunctionelements.h"
|
||||||
#include "../../jkqtpbaseelements.h"
|
#include "jkqtplotter/jkqtpbaseelements.h"
|
||||||
#include "../../jkqtpplotsmodel.h"
|
#include "jkqtplotter/jkqtpplotsmodel.h"
|
||||||
#include "../../jkqtptools.h"
|
#include "jkqtplottertools/jkqtptools.h"
|
||||||
|
|
||||||
#define N1 200
|
#define N1 200
|
||||||
#define N2 50
|
#define N2 50
|
||||||
|
@ -84,10 +84,7 @@ int main(int argc, char* argv[])
|
|||||||
graph->get_colorBarRightAxis()->set_axisLabel("light intensity [A.U.]");
|
graph->get_colorBarRightAxis()->set_axisLabel("light intensity [A.U.]");
|
||||||
// determine min/max of data automatically and use it to set the range of the color-scale
|
// determine min/max of data automatically and use it to set the range of the color-scale
|
||||||
graph->set_autoImageRange(true);
|
graph->set_autoImageRange(true);
|
||||||
// you can set the color-scale range manually by using:
|
|
||||||
// graph->set_autoImageRange(false);
|
|
||||||
// graph->set_imageMin(0);
|
|
||||||
// graph->set_imageMax(10);
|
|
||||||
|
|
||||||
|
|
||||||
// 5. add the graphs to the plot, so it is actually displayed
|
// 5. add the graphs to the plot, so it is actually displayed
|
||||||
@ -120,4 +117,36 @@ The result looks like this:
|
|||||||
|
|
||||||
![jkqtplotter_simpletest_imageplot](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_imageplot.png)
|
![jkqtplotter_simpletest_imageplot](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_imageplot.png)
|
||||||
|
|
||||||
|
There are several ways to modify the plot:
|
||||||
|
# You can set the color scale manually (here 0..2), by using
|
||||||
|
```
|
||||||
|
graph->set_autoImageRange(false);
|
||||||
|
graph->set_imageMin(0);
|
||||||
|
graph->set_imageMax(2);
|
||||||
|
```
|
||||||
|
instead of
|
||||||
|
```
|
||||||
|
graph->set_autoImageRange(true);
|
||||||
|
```
|
||||||
|
from above. The result will look like this:<br>
|
||||||
|
![jkqtplotter_simpletest_imageplot__scale02](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_imageplot__scale02.png)<br>
|
||||||
|
Note how the color scale is not used completely, because data really only scales between 0 and 1.
|
||||||
|
# If you set the color-range to 0.1 .. 0.8 with
|
||||||
|
```
|
||||||
|
graph->set_autoImageRange(false);
|
||||||
|
graph->set_imageMin(0.1);
|
||||||
|
graph->set_imageMax(0.8);
|
||||||
|
```
|
||||||
|
Then there will be datapoints above or below the range of the colorscale. The default behaviour of the graph is to use the first color of the palette for every pixel with a value below the minimum (here 0.1) and the last color in the palette for every pixel with a value above the maximum.<br>
|
||||||
|
![jkqtplotter_simpletest_imageplot__smallscalelimitcolor](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_imageplot__smallscalelimitcolor.png)<br>
|
||||||
|
You can change this behaviour by `set_rangeMinFailAction(),set_rangeMaxFailAction()` with one of these parameters:
|
||||||
|
- `JKQTPMathImageLastPaletteColor`: the default behaviour explained above
|
||||||
|
- `JKQTPMathImageGivenColor`: use a color set by `set_rangeMinFailColor(),set_rangeMaxFailColor()` (here e.g. black for min and grey for max)<br>
|
||||||
|
![jkqtplotter_simpletest_imageplot__smallscalecolor](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_imageplot__smallscalecolor.png)
|
||||||
|
- `JKQTPMathImageTransparent`: draw pixels transparent<br>
|
||||||
|
![jkqtplotter_simpletest_imageplot__smallscaletransparent](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_imageplot__smallscaletransparent.png)
|
||||||
|
.
|
||||||
|
.
|
||||||
|
|
||||||
|
|
||||||
[Back to JKQTPlotter main page](https://github.com/jkriege2/JKQtPlotter/)
|
[Back to JKQTPlotter main page](https://github.com/jkriege2/JKQtPlotter/)
|
125
test/jkqtplotter_simpletest_imageplot_modifier/README.md
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
[Back to JKQTPlotter main page](https://github.com/jkriege2/JKQtPlotter/)
|
||||||
|
|
||||||
|
# JKQtPlotter
|
||||||
|
|
||||||
|
## Simple math image plot
|
||||||
|
This project (see `./test/jkqtplotter_simpletest_imageplot_modifier/`) creates a JKQtPlotter widget (as a new window) and adds a color-coded image plot of a mathematical function (here `sin(r)`). Then a second image (linearly scaling from 1 in the center to 0 at the borders) is used to modify the first image. The modification can
|
||||||
|
|
||||||
|
The soruce code of the main application is (see `./test/jkqtplotter_simpletest_imageplot_modifier/jkqtplotter_simpletest_imageplot_modifier.cpp`):
|
||||||
|
```c++
|
||||||
|
#include <QApplication>
|
||||||
|
#include <cmath>
|
||||||
|
#include "jkqtplotter/jkqtplotter.h"
|
||||||
|
#include "jkqtplotter/jkqtpimageelements.h"
|
||||||
|
|
||||||
|
#ifndef M_PI
|
||||||
|
#define M_PI 3.14159265358979323846
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
int main(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
QApplication app(argc, argv);
|
||||||
|
|
||||||
|
JKQtPlotter plot;
|
||||||
|
// 1. create a plotter window and get a pointer to the internal datastore (for convenience)
|
||||||
|
plot.get_plotter()->set_useAntiAliasingForGraphs(true); // nicer (but slower) plotting
|
||||||
|
plot.get_plotter()->set_useAntiAliasingForSystem(true); // nicer (but slower) plotting
|
||||||
|
plot.get_plotter()->set_useAntiAliasingForText(true); // nicer (but slower) text rendering
|
||||||
|
JKQTPdatastore* ds=plot.getDatastore();
|
||||||
|
|
||||||
|
// 2. now we create data for the charts (taken from https://commons.wikimedia.org/wiki/File:Energiemix_Deutschland.svg)
|
||||||
|
const int NX=150; // image dimension in x-direction [pixels]
|
||||||
|
const int NY=150; // image dimension in x-direction [pixels]
|
||||||
|
double image[NX*NY]; // row-major image
|
||||||
|
double modifier[NX*NY]; // row-major modfier image
|
||||||
|
|
||||||
|
// 2 calculate image of airy disk in a row-major array
|
||||||
|
double x, y=-static_cast<double>(NY)/2.0;
|
||||||
|
for (int iy=0; iy<NY; iy++ ) {
|
||||||
|
x=-static_cast<double>(NX)/2.0;
|
||||||
|
for (int ix=0; ix<NX; ix++ ) {
|
||||||
|
const double r=sqrt(x*x+y*y);
|
||||||
|
image[iy*NX+ix] = cos(M_PI*r/20.0);
|
||||||
|
modifier[iy*NX+ix] = 1.0-r/sqrt(NX*NX/4.0+NY*NY/4.0);
|
||||||
|
x+=1;
|
||||||
|
}
|
||||||
|
y+=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 3. make data available to JKQtPlotter by adding it to the internal datastore.
|
||||||
|
// In this step the contents of C-array airydisk is copied into a column
|
||||||
|
// of the datastore in row-major order
|
||||||
|
size_t cImage=ds->addCopiedImageAsColumn(image, NX, NY, "imagedata");
|
||||||
|
size_t cModifier=ds->addCopiedImageAsColumn(modifier, NX, NY, "modifier");
|
||||||
|
|
||||||
|
|
||||||
|
// 4. create a graph (JKQTPColumnMathImage) with the column created above as data
|
||||||
|
// The data is color-coded with the color-palette JKQTPMathImageMATLAB
|
||||||
|
// the converted range of data is determined automatically because set_autoImageRange(true)
|
||||||
|
JKQTPColumnMathImage* graph=new JKQTPColumnMathImage(&plot);
|
||||||
|
graph->set_title("");
|
||||||
|
// image column with the data
|
||||||
|
graph->set_imageColumn(cImage);
|
||||||
|
// now set the modifier image:
|
||||||
|
graph->set_modifierColumn(cModifier);
|
||||||
|
graph->set_autoModifierRange(true);
|
||||||
|
// ... and specify which image property is modified (here the saturation, but ModifyAlpha for the transparency and ModifyValue from the HSV color-model are also possible):
|
||||||
|
graph->set_modifierMode(JKQTPMathImageBase::ModifySaturation);
|
||||||
|
// set size of the data (the datastore does not contain this info, as it only manages 1D columns of data and this is used to assume a row-major ordering
|
||||||
|
graph->set_Nx(NX);
|
||||||
|
graph->set_Ny(NY);
|
||||||
|
// where does the image start in the plot, given in plot-axis-coordinates (bottom-left corner)
|
||||||
|
graph->set_x(-NX/2.0);
|
||||||
|
graph->set_y(-NX/2.0);
|
||||||
|
// width and height of the image in plot-axis-coordinates
|
||||||
|
graph->set_width(NX);
|
||||||
|
graph->set_height(NY);
|
||||||
|
// color-map is "MATLAB"
|
||||||
|
graph->set_palette(JKQTPMathImageMATLAB);
|
||||||
|
// determine min/max of data automatically and use it to set the range of the color-scale
|
||||||
|
graph->set_autoImageRange(true);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 5. add the graphs to the plot, so it is actually displayed
|
||||||
|
plot.addGraph(graph);
|
||||||
|
|
||||||
|
|
||||||
|
// 6. set axis labels
|
||||||
|
plot.get_xAxis()->set_axisLabel("x [{\\mu}m]");
|
||||||
|
plot.get_yAxis()->set_axisLabel("y [{\\mu}m]");
|
||||||
|
|
||||||
|
|
||||||
|
// 7. fix axis and plot aspect ratio to 1
|
||||||
|
plot.get_plotter()->set_maintainAspectRatio(true);
|
||||||
|
plot.get_plotter()->set_maintainAxisAspectRatio(true);
|
||||||
|
|
||||||
|
// 8 autoscale the plot so the graph is contained
|
||||||
|
plot.zoomToFit();
|
||||||
|
|
||||||
|
// show plotter and make it a decent size
|
||||||
|
plot.show();
|
||||||
|
plot.resize(500,500);
|
||||||
|
plot.setWindowTitle("JKQTPColumnMathImage");
|
||||||
|
|
||||||
|
|
||||||
|
return app.exec();
|
||||||
|
}
|
||||||
|
```
|
||||||
|
The data image (`sin(r/30)`) on its own looks like this:<br>
|
||||||
|
![jkqtplotter_simpletest_imageplot_modifier_imageonly](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_imageplot_modifier_imageonly.png)<br>
|
||||||
|
and the modifier image on its own would look like this:<br>
|
||||||
|
![jkqtplotter_simpletest_imageplot_modifier_modifieronly](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_imageplot_modifier_modifieronly.png)
|
||||||
|
|
||||||
|
Combined the two form this plot:<br>
|
||||||
|
![jkqtplotter_simpletest_imageplot_modifier](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_imageplot_modifier.png)
|
||||||
|
|
||||||
|
|
||||||
|
See [`test/jkqtplotter_simpletest_imageplot`](https://github.com/jkriege2/JKQtPlotter/tree/master/test/jkqtplotter_simpletest_imageplot) for a detailed description of the other possibilities that the class JKQTPColumnMathImage (and also JKQTPMathImage) offer with respect to determining how an image is plotted. You can combine all options there with the modifier feature described here.
|
||||||
|
|
||||||
|
|
||||||
|
[Back to JKQTPlotter main page](https://github.com/jkriege2/JKQtPlotter/)
|
@ -0,0 +1,102 @@
|
|||||||
|
#include <QApplication>
|
||||||
|
#include <cmath>
|
||||||
|
#include "jkqtplotter/jkqtplotter.h"
|
||||||
|
#include "jkqtplotter/jkqtpimageelements.h"
|
||||||
|
|
||||||
|
#ifndef M_PI
|
||||||
|
#define M_PI 3.14159265358979323846
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
int main(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
QApplication app(argc, argv);
|
||||||
|
|
||||||
|
JKQtPlotter plot;
|
||||||
|
// 1. create a plotter window and get a pointer to the internal datastore (for convenience)
|
||||||
|
plot.get_plotter()->set_useAntiAliasingForGraphs(true); // nicer (but slower) plotting
|
||||||
|
plot.get_plotter()->set_useAntiAliasingForSystem(true); // nicer (but slower) plotting
|
||||||
|
plot.get_plotter()->set_useAntiAliasingForText(true); // nicer (but slower) text rendering
|
||||||
|
JKQTPdatastore* ds=plot.getDatastore();
|
||||||
|
|
||||||
|
// 2. now we create data for the charts (taken from https://commons.wikimedia.org/wiki/File:Energiemix_Deutschland.svg)
|
||||||
|
const int NX=150; // image dimension in x-direction [pixels]
|
||||||
|
const int NY=150; // image dimension in x-direction [pixels]
|
||||||
|
double image[NX*NY]; // row-major image
|
||||||
|
double modifier[NX*NY]; // row-major modfier image
|
||||||
|
|
||||||
|
// 2 calculate image of airy disk in a row-major array
|
||||||
|
double x, y=-static_cast<double>(NY)/2.0;
|
||||||
|
for (int iy=0; iy<NY; iy++ ) {
|
||||||
|
x=-static_cast<double>(NX)/2.0;
|
||||||
|
for (int ix=0; ix<NX; ix++ ) {
|
||||||
|
const double r=sqrt(x*x+y*y);
|
||||||
|
image[iy*NX+ix] = cos(M_PI*r/20.0);
|
||||||
|
modifier[iy*NX+ix] = 1.0-r/sqrt(NX*NX/4.0+NY*NY/4.0);
|
||||||
|
x+=1;
|
||||||
|
}
|
||||||
|
y+=1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 3. make data available to JKQtPlotter by adding it to the internal datastore.
|
||||||
|
// In this step the contents of C-array airydisk is copied into a column
|
||||||
|
// of the datastore in row-major order
|
||||||
|
size_t cImage=ds->addCopiedImageAsColumn(image, NX, NY, "imagedata");
|
||||||
|
size_t cModifier=ds->addCopiedImageAsColumn(modifier, NX, NY, "modifier");
|
||||||
|
|
||||||
|
|
||||||
|
// 4. create a graph (JKQTPColumnMathImage) with the column created above as data
|
||||||
|
// The data is color-coded with the color-palette JKQTPMathImageMATLAB
|
||||||
|
// the converted range of data is determined automatically because set_autoImageRange(true)
|
||||||
|
JKQTPColumnMathImage* graph=new JKQTPColumnMathImage(&plot);
|
||||||
|
graph->set_title("");
|
||||||
|
// image column with the data
|
||||||
|
graph->set_imageColumn(cImage);
|
||||||
|
// now set the modifier image:
|
||||||
|
graph->set_modifierColumn(cModifier);
|
||||||
|
graph->set_autoModifierRange(true);
|
||||||
|
// ... and specify which image property is modified (here the saturation, but ModifyAlpha for the transparency and ModifyValue from the HSV color-model are also possible):
|
||||||
|
graph->set_modifierMode(JKQTPMathImageBase::ModifySaturation);
|
||||||
|
// set size of the data (the datastore does not contain this info, as it only manages 1D columns of data and this is used to assume a row-major ordering
|
||||||
|
graph->set_Nx(NX);
|
||||||
|
graph->set_Ny(NY);
|
||||||
|
// where does the image start in the plot, given in plot-axis-coordinates (bottom-left corner)
|
||||||
|
graph->set_x(-NX/2.0);
|
||||||
|
graph->set_y(-NX/2.0);
|
||||||
|
// width and height of the image in plot-axis-coordinates
|
||||||
|
graph->set_width(NX);
|
||||||
|
graph->set_height(NY);
|
||||||
|
// color-map is "MATLAB"
|
||||||
|
graph->set_palette(JKQTPMathImageMATLAB);
|
||||||
|
// determine min/max of data automatically and use it to set the range of the color-scale
|
||||||
|
graph->set_autoImageRange(true);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 5. add the graphs to the plot, so it is actually displayed
|
||||||
|
plot.addGraph(graph);
|
||||||
|
|
||||||
|
|
||||||
|
// 6. set axis labels
|
||||||
|
plot.get_xAxis()->set_axisLabel("x [{\\mu}m]");
|
||||||
|
plot.get_yAxis()->set_axisLabel("y [{\\mu}m]");
|
||||||
|
|
||||||
|
|
||||||
|
// 7. fix axis and plot aspect ratio to 1
|
||||||
|
plot.get_plotter()->set_maintainAspectRatio(true);
|
||||||
|
plot.get_plotter()->set_maintainAxisAspectRatio(true);
|
||||||
|
|
||||||
|
// 8 autoscale the plot so the graph is contained
|
||||||
|
plot.zoomToFit();
|
||||||
|
|
||||||
|
// show plotter and make it a decent size
|
||||||
|
plot.show();
|
||||||
|
plot.resize(500,500);
|
||||||
|
plot.setWindowTitle("JKQTPColumnMathImage");
|
||||||
|
|
||||||
|
|
||||||
|
return app.exec();
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
# source code for this simple demo
|
||||||
|
SOURCES = jkqtplotter_simpletest_imageplot_modifier.cpp
|
||||||
|
|
||||||
|
# configure Qt
|
||||||
|
CONFIG += qt
|
||||||
|
QT += core gui svg
|
||||||
|
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport
|
||||||
|
|
||||||
|
# output executable name
|
||||||
|
TARGET = jkqtplotter_simpletest_imageplot_modifier
|
||||||
|
|
||||||
|
# include JKQtPlotter source code
|
||||||
|
include(../../lib/jkqtplotter.pri)
|
||||||
|
# here you can activate some debug options
|
||||||
|
#DEFINES += SHOW_JKQTPLOTTER_DEBUG
|
||||||
|
#DEFINES += JKQTBP_AUTOTIMER
|
115
test/jkqtplotter_simpletest_imageplot_nodatastore/README.md
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
[Back to JKQTPlotter main page](https://github.com/jkriege2/JKQtPlotter/)
|
||||||
|
|
||||||
|
# JKQtPlotter
|
||||||
|
|
||||||
|
## Simple math image plot without use of central JKQTdatastore
|
||||||
|
This project (see `./test/jkqtplotter_simpletest_imageplot_nodatastore/`) simply creates a JKQtPlotter widget (as a new window) and adds a color-coded image plot of a mathematical function (here the Airy disk). The image is stored as a simple C-array in row-major ordering and then given to a JKQTPMathImage to visualize it. The data is stored as a pointer directly in the JKQTPMathImage object. There is also a variant JKQTPColumnMathImage of JKQTPMathImage, which references a column in the internal JKQTdatastore and uses the data there for plotting. In both cases data has to be organized as a row-major matrix of values. JKQTPMathImage supports different dataytpes ([u]nit8/16/32/64,float,double see `JKQTPMathImageBase::DataType`) that can be configured e.g. by `set_data()`.
|
||||||
|
|
||||||
|
The soruce code of the main application is (see `./test/jkqtplotter_simpletest_imageplot_nodatastore/jkqtplotter_simpletest_imageplot_nodatastore.cpp`):
|
||||||
|
```c++
|
||||||
|
#include <QApplication>
|
||||||
|
#include <cmath>
|
||||||
|
#include "jkqtplotter/jkqtplotter.h"
|
||||||
|
#include "jkqtplotter/jkqtpimageelements.h"
|
||||||
|
|
||||||
|
#ifndef M_PI
|
||||||
|
#define M_PI 3.14159265358979323846
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
int main(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
QApplication app(argc, argv);
|
||||||
|
|
||||||
|
JKQtPlotter plot;
|
||||||
|
// 1. create a plotter window and get a pointer to the internal datastore (for convenience)
|
||||||
|
plot.get_plotter()->set_useAntiAliasingForGraphs(true); // nicer (but slower) plotting
|
||||||
|
plot.get_plotter()->set_useAntiAliasingForSystem(true); // nicer (but slower) plotting
|
||||||
|
plot.get_plotter()->set_useAntiAliasingForText(true); // nicer (but slower) text rendering
|
||||||
|
|
||||||
|
// 2. now we create data for the charts (taken from https://commons.wikimedia.org/wiki/File:Energiemix_Deutschland.svg)
|
||||||
|
const int NX=100; // image dimension in x-direction [pixels]
|
||||||
|
const int NY=100; // image dimension in x-direction [pixels]
|
||||||
|
const double dx=1e-2; // size of a pixel in x-direction [micrometers]
|
||||||
|
const double dy=1e-2; // size of a pixel in x-direction [micrometers]
|
||||||
|
const double w=static_cast<double>(NX)*dx;
|
||||||
|
const double h=static_cast<double>(NY)*dy;
|
||||||
|
double airydisk[NX*NY]; // row-major image
|
||||||
|
|
||||||
|
// 2.1 Parameters for airy disk plot (see https://en.wikipedia.org/wiki/Airy_disk)
|
||||||
|
double NA=1.1; // numerical aperture of lens
|
||||||
|
double wavelength=488e-3; // wavelength of the light [micrometers]
|
||||||
|
|
||||||
|
// 2.2 calculate image of airy disk in a row-major array
|
||||||
|
double x, y=-h/2.0;
|
||||||
|
for (int iy=0; iy<NY; iy++ ) {
|
||||||
|
x=-w/2.0;
|
||||||
|
for (int ix=0; ix<NX; ix++ ) {
|
||||||
|
const double r=sqrt(x*x+y*y);
|
||||||
|
const double v=2.0*M_PI*NA*r/wavelength;
|
||||||
|
airydisk[iy*NX+ix] = pow(2.0*j1(v)/v, 2);
|
||||||
|
x+=dx;
|
||||||
|
}
|
||||||
|
y+=dy;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 3. create a graph (JKQTPMathImage) with referencing the data created above as data
|
||||||
|
// The data is color-coded with the color-palette JKQTPMathImageBLUEYELLOW
|
||||||
|
// the converted range of data is determined automatically because set_autoImageRange(true)
|
||||||
|
JKQTPMathImage* graph=new JKQTPMathImage(&plot);
|
||||||
|
graph->set_title("");
|
||||||
|
// set array as datasource, with correct size NX*NY and datatype JKQTPMathImageBase::DataType::DoubleArray
|
||||||
|
graph->set_data(airydisk, NX, NY, JKQTPMathImageBase::DataType::DoubleArray);
|
||||||
|
// where does the image start in the plot, given in plot-axis-coordinates (bottom-left corner)
|
||||||
|
graph->set_x(-w/2.0);
|
||||||
|
graph->set_y(-h/2.0);
|
||||||
|
// width and height of the image in plot-axis-coordinates
|
||||||
|
graph->set_width(w);
|
||||||
|
graph->set_height(h);
|
||||||
|
// color-map is "BLUEYELLOW"
|
||||||
|
graph->set_palette(JKQTPMathImageBLUEYELLOW);
|
||||||
|
// get coordinate axis of color-bar and set its label
|
||||||
|
graph->get_colorBarRightAxis()->set_axisLabel("light intensity [A.U.]");
|
||||||
|
// determine min/max of data automatically and use it to set the range of the color-scale
|
||||||
|
graph->set_autoImageRange(true);
|
||||||
|
// you can set the color-scale range manually by using:
|
||||||
|
// graph->set_autoImageRange(false);
|
||||||
|
// graph->set_imageMin(0);
|
||||||
|
// graph->set_imageMax(10);
|
||||||
|
|
||||||
|
|
||||||
|
// 4. add the graphs to the plot, so it is actually displayed
|
||||||
|
plot.addGraph(graph);
|
||||||
|
|
||||||
|
|
||||||
|
// 5. set axis labels
|
||||||
|
plot.get_xAxis()->set_axisLabel("x [{\\mu}m]");
|
||||||
|
plot.get_yAxis()->set_axisLabel("y [{\\mu}m]");
|
||||||
|
|
||||||
|
|
||||||
|
// 6. fix axis and plot aspect ratio to 1
|
||||||
|
plot.get_plotter()->set_maintainAspectRatio(true);
|
||||||
|
plot.get_plotter()->set_maintainAxisAspectRatio(true);
|
||||||
|
|
||||||
|
// 7. autoscale the plot so the graph is contained
|
||||||
|
plot.zoomToFit();
|
||||||
|
|
||||||
|
// show plotter and make it a decent size
|
||||||
|
plot.show();
|
||||||
|
plot.resize(600,600);
|
||||||
|
plot.setWindowTitle("JKQTPMathImage");
|
||||||
|
|
||||||
|
|
||||||
|
return app.exec();
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The result looks like this:
|
||||||
|
|
||||||
|
![jkqtplotter_simpletest_imageplot_nodatastore](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_imageplot_nodatastore.png)
|
||||||
|
|
||||||
|
See [`test/jkqtplotter_simpletest_imageplot`](https://github.com/jkriege2/JKQtPlotter/tree/master/test/jkqtplotter_simpletest_imageplot) for a detailed description of the other possibilities that the class JKQTPColumnMathImage (and also JKQTPMathImage) offer with respect to determining how an image is plottet.
|
||||||
|
|
||||||
|
|
||||||
|
[Back to JKQTPlotter main page](https://github.com/jkriege2/JKQtPlotter/)
|
@ -0,0 +1,96 @@
|
|||||||
|
#include <QApplication>
|
||||||
|
#include <cmath>
|
||||||
|
#include "jkqtplotter/jkqtplotter.h"
|
||||||
|
#include "jkqtplotter/jkqtpimageelements.h"
|
||||||
|
|
||||||
|
#ifndef M_PI
|
||||||
|
#define M_PI 3.14159265358979323846
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
int main(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
QApplication app(argc, argv);
|
||||||
|
|
||||||
|
JKQtPlotter plot;
|
||||||
|
// 1. create a plotter window and get a pointer to the internal datastore (for convenience)
|
||||||
|
plot.get_plotter()->set_useAntiAliasingForGraphs(true); // nicer (but slower) plotting
|
||||||
|
plot.get_plotter()->set_useAntiAliasingForSystem(true); // nicer (but slower) plotting
|
||||||
|
plot.get_plotter()->set_useAntiAliasingForText(true); // nicer (but slower) text rendering
|
||||||
|
|
||||||
|
// 2. now we create data for the charts (taken from https://commons.wikimedia.org/wiki/File:Energiemix_Deutschland.svg)
|
||||||
|
const int NX=100; // image dimension in x-direction [pixels]
|
||||||
|
const int NY=100; // image dimension in x-direction [pixels]
|
||||||
|
const double dx=1e-2; // size of a pixel in x-direction [micrometers]
|
||||||
|
const double dy=1e-2; // size of a pixel in x-direction [micrometers]
|
||||||
|
const double w=static_cast<double>(NX)*dx;
|
||||||
|
const double h=static_cast<double>(NY)*dy;
|
||||||
|
double airydisk[NX*NY]; // row-major image
|
||||||
|
|
||||||
|
// 2.1 Parameters for airy disk plot (see https://en.wikipedia.org/wiki/Airy_disk)
|
||||||
|
double NA=1.1; // numerical aperture of lens
|
||||||
|
double wavelength=488e-3; // wavelength of the light [micrometers]
|
||||||
|
|
||||||
|
// 2.2 calculate image of airy disk in a row-major array
|
||||||
|
double x, y=-h/2.0;
|
||||||
|
for (int iy=0; iy<NY; iy++ ) {
|
||||||
|
x=-w/2.0;
|
||||||
|
for (int ix=0; ix<NX; ix++ ) {
|
||||||
|
const double r=sqrt(x*x+y*y);
|
||||||
|
const double v=2.0*M_PI*NA*r/wavelength;
|
||||||
|
airydisk[iy*NX+ix] = pow(2.0*j1(v)/v, 2);
|
||||||
|
x+=dx;
|
||||||
|
}
|
||||||
|
y+=dy;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 3. create a graph (JKQTPMathImage) with referencing the data created above as data
|
||||||
|
// The data is color-coded with the color-palette JKQTPMathImageBLUEYELLOW
|
||||||
|
// the converted range of data is determined automatically because set_autoImageRange(true)
|
||||||
|
JKQTPMathImage* graph=new JKQTPMathImage(&plot);
|
||||||
|
graph->set_title("");
|
||||||
|
// set array as datasource, with correct size NX*NY and datatype JKQTPMathImageBase::DataType::DoubleArray
|
||||||
|
graph->set_data(airydisk, NX, NY, JKQTPMathImageBase::DataType::DoubleArray);
|
||||||
|
// where does the image start in the plot, given in plot-axis-coordinates (bottom-left corner)
|
||||||
|
graph->set_x(-w/2.0);
|
||||||
|
graph->set_y(-h/2.0);
|
||||||
|
// width and height of the image in plot-axis-coordinates
|
||||||
|
graph->set_width(w);
|
||||||
|
graph->set_height(h);
|
||||||
|
// color-map is "BLUEYELLOW"
|
||||||
|
graph->set_palette(JKQTPMathImageBLUEYELLOW);
|
||||||
|
// get coordinate axis of color-bar and set its label
|
||||||
|
graph->get_colorBarRightAxis()->set_axisLabel("light intensity [A.U.]");
|
||||||
|
// determine min/max of data automatically and use it to set the range of the color-scale
|
||||||
|
graph->set_autoImageRange(true);
|
||||||
|
// you can set the color-scale range manually by using:
|
||||||
|
// graph->set_autoImageRange(false);
|
||||||
|
// graph->set_imageMin(0);
|
||||||
|
// graph->set_imageMax(10);
|
||||||
|
|
||||||
|
|
||||||
|
// 4. add the graphs to the plot, so it is actually displayed
|
||||||
|
plot.addGraph(graph);
|
||||||
|
|
||||||
|
|
||||||
|
// 5. set axis labels
|
||||||
|
plot.get_xAxis()->set_axisLabel("x [{\\mu}m]");
|
||||||
|
plot.get_yAxis()->set_axisLabel("y [{\\mu}m]");
|
||||||
|
|
||||||
|
|
||||||
|
// 6. fix axis and plot aspect ratio to 1
|
||||||
|
plot.get_plotter()->set_maintainAspectRatio(true);
|
||||||
|
plot.get_plotter()->set_maintainAxisAspectRatio(true);
|
||||||
|
|
||||||
|
// 7. autoscale the plot so the graph is contained
|
||||||
|
plot.zoomToFit();
|
||||||
|
|
||||||
|
// show plotter and make it a decent size
|
||||||
|
plot.show();
|
||||||
|
plot.resize(600,600);
|
||||||
|
plot.setWindowTitle("JKQTPMathImage");
|
||||||
|
|
||||||
|
|
||||||
|
return app.exec();
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
# source code for this simple demo
|
||||||
|
SOURCES = jkqtplotter_simpletest_imageplot_nodatastore.cpp
|
||||||
|
|
||||||
|
# configure Qt
|
||||||
|
CONFIG += qt
|
||||||
|
QT += core gui svg
|
||||||
|
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport
|
||||||
|
|
||||||
|
# output executable name
|
||||||
|
TARGET = jkqtplotter_simpletest_imageplot_nodatastore
|
||||||
|
|
||||||
|
# include JKQtPlotter source code
|
||||||
|
include(../../lib/jkqtplotter.pri)
|
||||||
|
# here you can activate some debug options
|
||||||
|
#DEFINES += SHOW_JKQTPLOTTER_DEBUG
|
||||||
|
#DEFINES += JKQTBP_AUTOTIMER
|
@ -122,4 +122,6 @@ The result looks like this:
|
|||||||
|
|
||||||
![jkqtplotter_simpletest_imageplot](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_imageplot_opencv.png)
|
![jkqtplotter_simpletest_imageplot](https://raw.githubusercontent.com/jkriege2/JKQtPlotter/master/screenshots/jkqtplotter_simpletest_imageplot_opencv.png)
|
||||||
|
|
||||||
|
See [`test/jkqtplotter_simpletest_imageplot`](https://github.com/jkriege2/JKQtPlotter/tree/master/test/jkqtplotter_simpletest_imageplot) for a detailed description of the other possibilities that the class JKQTPColumnMathImage (and also JKQTPMathImage) offer with respect to determining how an image is plottet.
|
||||||
|
|
||||||
[Back to JKQTPlotter main page](https://github.com/jkriege2/JKQtPlotter/)
|
[Back to JKQTPlotter main page](https://github.com/jkriege2/JKQtPlotter/)
|