Qt:具有分类 angular 轴的极坐标图
Qt: QPolarChart with categorial angular axis
我想将 QPolarChart 中 angular 轴的度数替换为
一些文本如附图所示(例如,而不是 90.0 -> "Cat 1")。
我试过 QCategoryAxis 但在这种情况下,类别出现在轴之间(例如 90 到 180 度之间)。
现在我使用以下代码来创建极坐标图:
QPolarChart *chart = new QPolarChart();
QValueAxis *angularAxis = new QValueAxis();
angularAxis->setRange(0, 360);
QLineSeries *series1 = new QLineSeries();
series1->append(0, 60);
series1->append(90, -60);
series1->append(180, 50);
series1->append(270, 62);
series1->append(360, 60);
QLineSeries *series2 = new QLineSeries();
series2->append(0, 0);
series2->append(90, 0);
series2->append(180, 0);
series2->append(270, 0);
series2->append(360, 0);
chart->addSeries(series1);
chart->addSeries(series2);
chart->addAxis(angularAxis, QPolarChart::PolarOrientationAngular);
ValueAxis *radialAxis = new QValueAxis();
radialAxis->setTickCount(9);
radialAxis->setLabelFormat("%d");
chart->addAxis(radialAxis, QPolarChart::PolarOrientationRadial);
series1->attachAxis(radialAxis);
series1->attachAxis(angularAxis);
series2->attachAxis(radialAxis);
series2->attachAxis(angularAxis);
radialAxis->setRange(-100, 100);
QChartView *chartView = new QChartView();
chartView->setChart(chart);
chartView->setRenderHint(QPainter::Antialiasing);
ui->mainPlot->addWidget(chartView);
解决方案是使用 QCategoryAxis
但在 QCategoryAxis::AxisLabelsPositionOnValue
中使用 labelsPosition
。
#include <QApplication>
#include <QtCharts>
using namespace QtCharts;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QPolarChart *chart = new QPolarChart();
QCategoryAxis *angularAxis = new QCategoryAxis;
angularAxis->setLabelsPosition(QCategoryAxis::AxisLabelsPositionOnValue);
angularAxis->setRange(0, 360);
angularAxis->append("Cat 1", 90);
QLineSeries *series1 = new QLineSeries();
*series1 << QPointF(0, 60) << QPointF(90, -60) << QPointF(180, 50) << QPointF(270, 62) << QPointF(360, 60);
QLineSeries *series2 = new QLineSeries();
*series2 << QPointF(0, 0)<< QPointF(90, 0) << QPointF(180, 0) << QPointF(270, 0) << QPointF(360, 0);
chart->addSeries(series1);
chart->addSeries(series2);
chart->addAxis(angularAxis, QPolarChart::PolarOrientationAngular);
QValueAxis *radialAxis = new QValueAxis();
radialAxis->setTickCount(9);
radialAxis->setLabelFormat("%d");
chart->addAxis(radialAxis, QPolarChart::PolarOrientationRadial);
series1->attachAxis(radialAxis);
series1->attachAxis(angularAxis);
series2->attachAxis(radialAxis);
series2->attachAxis(angularAxis);
radialAxis->setRange(-100, 100);
QChartView *chartView = new QChartView();
chartView->setChart(chart);
chartView->setRenderHint(QPainter::Antialiasing);
chartView->show();
return a.exec();
}
我想将 QPolarChart 中 angular 轴的度数替换为 一些文本如附图所示(例如,而不是 90.0 -> "Cat 1")。 我试过 QCategoryAxis 但在这种情况下,类别出现在轴之间(例如 90 到 180 度之间)。
现在我使用以下代码来创建极坐标图:
QPolarChart *chart = new QPolarChart();
QValueAxis *angularAxis = new QValueAxis();
angularAxis->setRange(0, 360);
QLineSeries *series1 = new QLineSeries();
series1->append(0, 60);
series1->append(90, -60);
series1->append(180, 50);
series1->append(270, 62);
series1->append(360, 60);
QLineSeries *series2 = new QLineSeries();
series2->append(0, 0);
series2->append(90, 0);
series2->append(180, 0);
series2->append(270, 0);
series2->append(360, 0);
chart->addSeries(series1);
chart->addSeries(series2);
chart->addAxis(angularAxis, QPolarChart::PolarOrientationAngular);
ValueAxis *radialAxis = new QValueAxis();
radialAxis->setTickCount(9);
radialAxis->setLabelFormat("%d");
chart->addAxis(radialAxis, QPolarChart::PolarOrientationRadial);
series1->attachAxis(radialAxis);
series1->attachAxis(angularAxis);
series2->attachAxis(radialAxis);
series2->attachAxis(angularAxis);
radialAxis->setRange(-100, 100);
QChartView *chartView = new QChartView();
chartView->setChart(chart);
chartView->setRenderHint(QPainter::Antialiasing);
ui->mainPlot->addWidget(chartView);
解决方案是使用 QCategoryAxis
但在 QCategoryAxis::AxisLabelsPositionOnValue
中使用 labelsPosition
。
#include <QApplication>
#include <QtCharts>
using namespace QtCharts;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QPolarChart *chart = new QPolarChart();
QCategoryAxis *angularAxis = new QCategoryAxis;
angularAxis->setLabelsPosition(QCategoryAxis::AxisLabelsPositionOnValue);
angularAxis->setRange(0, 360);
angularAxis->append("Cat 1", 90);
QLineSeries *series1 = new QLineSeries();
*series1 << QPointF(0, 60) << QPointF(90, -60) << QPointF(180, 50) << QPointF(270, 62) << QPointF(360, 60);
QLineSeries *series2 = new QLineSeries();
*series2 << QPointF(0, 0)<< QPointF(90, 0) << QPointF(180, 0) << QPointF(270, 0) << QPointF(360, 0);
chart->addSeries(series1);
chart->addSeries(series2);
chart->addAxis(angularAxis, QPolarChart::PolarOrientationAngular);
QValueAxis *radialAxis = new QValueAxis();
radialAxis->setTickCount(9);
radialAxis->setLabelFormat("%d");
chart->addAxis(radialAxis, QPolarChart::PolarOrientationRadial);
series1->attachAxis(radialAxis);
series1->attachAxis(angularAxis);
series2->attachAxis(radialAxis);
series2->attachAxis(angularAxis);
radialAxis->setRange(-100, 100);
QChartView *chartView = new QChartView();
chartView->setChart(chart);
chartView->setRenderHint(QPainter::Antialiasing);
chartView->show();
return a.exec();
}