Я не нашел способ скрыть некоторые категории в QBarCategoryAxis
когда я создаю диаграмму. Если я не укажу категорию для оси, по умолчанию категории будут похожи от 1 до QBarSet
размер. Если я укажу категорию, как я могу отображать только некоторые категории по оси. Например: как отображать только первую и последнюю категории и категорию в середине в QBarCategoryAxis
?
Редактировать:
В настоящее время я получаю вот так:
у меня есть такой QBarSet
который имеет 6 элементов. И я не устанавливал текст категории, поэтому по умолчанию эти тексты категорий имеют значение от 1 до 6. Я хочу, чтобы отображались некоторые тексты категорий, например отображать только 1, 3, 6 и остальной текст (2 , 4, 5) скрыты.
Почему я хочу это сделать?
Потому что когда QBarSet
имеет больше элементов, и когда я сам определяю тексты категорий, обычно мне нужно развернуть окно, чтобы я мог видеть все тексты категорий, которые отображаются на оси X. Но я просто хочу, чтобы диаграмма имела фиксированный размер, поэтому для текстов я просто хочу, чтобы часть из них отображалась.
Кстати, это будет выглядеть так, если в наборе баров много элементов, а тексты ниже не будут отображаться полностью, пока я не разверну окно.
Изменить 2:
Это то, что я хочу, чтобы график выглядел так:
Как вы можете видеть, под осью х у него всего 5 текстов.
Следующее решение работает только для случая, когда вы хотите отобразить даты на оси X. Хитрость заключается в использовании QDateTimeAxis
но чтобы сделать это, создайте фиктивный QLineSeries
это будет иметь в качестве значений даты и в И что-нибудь еще, то оно будет скрыто.
#include <QApplication>
#include <QtCharts>
QT_CHARTS_USE_NAMESPACE
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QChartView w;
QBarSet *set0 = new QBarSet("bar1");
*set0 << 1 << 4 << 3 << 7 << 2 << 5 << 1 << 3 << 3 << 2 << 1 << 6 << 7 << 5;
QDateTime from = QDateTime::currentDateTime();
QLineSeries *ls = new QLineSeries; //fictitious series
for(int i=0; i < set0->count(); i++){
*ls << QPointF(from.addDays(i+1).toMSecsSinceEpoch(), 0);
}
QBarSeries *series = new QBarSeries;
series->append(set0);
QDateTimeAxis *axisX = new QDateTimeAxis;
axisX->setFormat("MMMM dd");
axisX->setGridLineVisible(false);
QValueAxis *axisY = new QValueAxis;
QChart *chart= new QChart;
w.setChart(chart);
chart->addSeries(series);
chart->addSeries(ls);
chart->setAxisX(axisX, ls);
chart->setAxisY(axisY, series);
ls->hide(); // hide serie
w.show();
return a.exec();
}
Других решений пока нет …