JKQtPlotter/examples/parametriccurve/parametriccurve.cpp

101 lines
3.5 KiB
C++
Raw Normal View History

/** \example parametriccurve.cpp
* Shows how to plot parametric curves from datapoints with JKQTPlotter
*
* \ref JKQTPlotterParametricCurves
*/
2022-08-27 04:32:48 +08:00
#include "jkqtpexampleapplication.h"
#include <QApplication>
#include "jkqtplotter/jkqtplotter.h"
2019-06-20 22:06:31 +08:00
#include "jkqtplotter/graphs/jkqtpscatter.h"
int main(int argc, char* argv[])
{
2022-08-27 04:32:48 +08:00
JKQTPAppSettingController highDPIController(argc, argv);
JKQTPExampleApplication app(argc, argv);
// 1. create two plotter windows that share the same internal datastore (for convenience)
JKQTPlotter plot, plot2;
JKQTPDatastore* ds=plot.getDatastore();
plot2.useExternalDatastore(ds);
// 2. now we create a vector of x- and y-values of the logarithmic spiral
// in addition the radius is stored in column R
QVector<double> X, Y, R;
const int Ndata=500; // number of plot points in each curve
const double phiMax=4.0*JKQTPSTATISTICS_PI;
const double a=1;
const double k=0.2;
for (double phi=-phiMax; phi<=phiMax; phi+=phiMax/double(Ndata)) {
const double x=a*exp(k*phi)*cos(phi);
const double y=a*exp(k*phi)*sin(phi);
X<<x;
Y<<y;
R<<sqrt(x*x+y*y);
}
// and copy it to the datastore
size_t columnX=ds->addCopiedColumn(X, "x");
size_t columnY=ds->addCopiedColumn(Y, "y");
size_t columnR=ds->addCopiedColumn(R, "r");
// 3. now we make several graphs. In each one, another property of the graph is controlled by
// a datacolumn
// 3.1 the basic graph
JKQTPXYLineGraph* graph1=new JKQTPXYLineGraph(&plot);
graph1->setXColumn(columnX);
graph1->setYColumn(columnY);
graph1->setDrawLine(true);
graph1->setSymbolType(JKQTPNoSymbol);
graph1->setUseNonvisibleLineCompression(false); // necessary, because this is enabled by default and leads a distrubed plot
graph1->setTitle("one-colored spiral");
plot.addGraph(graph1);
// 3.2 for graph2 is the same as graph 1, but in addition, the color of the lines
// is set, based on the contents of column R, via the color-palette JKQTPMathImageMATLAB
JKQTPXYParametrizedScatterGraph* graph2=new JKQTPXYParametrizedScatterGraph(&plot2);
graph2->setXColumn(columnX);
graph2->setYColumn(columnY);
graph2->setColorColumn(columnR);
graph2->setColorPalette(JKQTPMathImageMATLAB);
graph2->setSymbolType(JKQTPNoSymbol);
graph2->setDrawLine(true);
graph2->setTitle("colored spiral");
graph2->getColorBarRightAxis()->setAxisLabel("color scale radius $r(\\phi)$");
plot2.addGraph(graph2);
// 4. set the axis scale aspect ratios to 1,
// autoscale the plot so the graph is contained
// and format the coordinate system and key
plot.getPlotter()->setMaintainAspectRatio(true);
plot.getPlotter()->setAspectRatio(1);
plot.getXAxis()->setAxisLabel("x-axis");
plot.getYAxis()->setAxisLabel("y-axis");
plot.getXAxis()->setDrawGrid(false);
plot.getYAxis()->setDrawGrid(false);
plot.setXY(-15,15,-15,15);
plot2.getPlotter()->setMaintainAspectRatio(true);
plot2.getPlotter()->setAspectRatio(1);
plot2.getXAxis()->setAxisLabel("x-axis");
plot2.getYAxis()->setAxisLabel("y-axis");
plot2.getXAxis()->setDrawGrid(false);
plot2.getYAxis()->setDrawGrid(false);
plot2.setXY(-15,15,-15,15);
// 5. show plotters and make them a decent size
plot.show();
plot.resize(400,400);
plot.setWindowTitle("1: JKQTPXYLineGraph");
plot2.show();
plot2.setWindowTitle("2: JKQTPXYParametrizedScatterGraph");
plot2.resize(400,400);
return app.exec();
}