Для оценки производительности я строил одни и те же данные с QCPScatterStyle::ssCircle
и QCPScatterStyle::ssDot
, оба с отключенной адаптивной выборкой.График с ssCircle
выглядит хорошо, и он немного ленив, но это было ожидаемо, в то время как график с ssDot
быстрее, что также ожидалось, но график выглядит слишком тонким (не ожидаемым), и данные изменяютсяВнешний вид при изменении размера (не ожидается).
Правильные изображения после минимального изменения ширины.В верхней части используется ssDot
, в нижней - ssCircle
.Как видно, между двумя верхними графиками есть видимая разница.
Я что-то не так делаю, это ошибка или, возможно, это даже предполагаемое поведение?
Это использует QCustomPlot 2.0.1 с MSVC 2017 на Win10.
#include <random>
#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include <qcustomplot.h>
int
main( int argc, char *argv[] ) {
QApplication app( argc, argv );
QMainWindow wnd;
auto *customPlot = new QCustomPlot();
customPlot->addGraph();
std::normal_distribution<> d{5, 2};
std::random_device rd{};
std::mt19937 gen{rd()};
int const num = 100000;
QVector<double> x0, y0;
x0.resize( num );
y0.resize( num );
for( int n = 0; n < num; ++n ) {
x0[n] = d( gen );
y0[n] = d( gen );
};
customPlot->graph( 0 )->setScatterStyle(
QCPScatterStyle( QCPScatterStyle::ssCircle, 1 ) );
// QCPScatterStyle( QCPScatterStyle::ssDot, 1 ) );
customPlot->graph( 0 )->setLineStyle( QCPGraph::lsNone );
customPlot->graph( 0 )->setAdaptiveSampling( false );
customPlot->graph( 0 )->setData( x0, y0 );
customPlot->xAxis->setRange( -5, 15.0 );
customPlot->yAxis->setRange( -5, 15.0 );
wnd.setCentralWidget( customPlot );
wnd.resize( 400, 300 );
wnd.show();
return app.exec();
}