Отображать дублированные (неуникальные) метки категорий в axisX в QChart - QCandlestickSeries - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь установить метки категорий axisX для объекта QChart - QCandlestickSeries; однако он принимает только уникальные значения. Я хочу, чтобы метки категорий оси X были первой буквой каждого месяца. Я также полностью осознаю, что категория осей диаграммы (QBarCategoryAxis) должна быть допустимой строкой QString, и ее нельзя дублировать (https://doc.qt.io/qt-5/qbarcategoryaxis.html#setCategories). Есть ли еще способ отобразить диаграмму на желаемом выходе?

Ниже приведен справочник по программе python.

import sys
from PyQt5 import QtCore, QtGui, QtWidgets, QtChart
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtChart import *

class Window(QMainWindow):

    def __init__(self):
        super().__init__()

        self.data = (("J",15.28,15.54,15.22,15.26),("F",15.3,15.56,15.3,15.42),("M",15.7,15.98,15.4,15.4),("A",15.58,15.6,15.24,15.34),("M",15.3,15.34,15.06,15.1),("J",15.3,15.48,14.72,14.78),("J",14.82,15,14.6,14.62),("A",14.76,15.1,14.76,15),("S",15.1,15.58,15.1,15.4),("O",15.5,15.66,15.48,15.66),("N",15.66,16.14,15.58,15.58),("D",15.58,15.96,15.52,15.88))
        self.chart = QChart()
        self.series = QCandlestickSeries()

        color = QColor()
        color.setRgb(229,57, 53)
        self.series.setDecreasingColor(color)

        color.setRgb(76,175, 80)
        self.series.setIncreasingColor(color)

        self.series.setBodyOutlineVisible(False)

        self.date_labels = []
        self.resize(640, 480)

        for month, o, h, l, c in self.data:
            self.series.append(QCandlestickSet(o, h, l, c))
            self.date_labels.append(str(month))

        self.chart.addSeries(self.series)
        self.chart.createDefaultAxes()
        self.chart.legend().hide()
        self.chart.axisX(self.series).setCategories(self.date_labels) #It only accepts unique category labels though

        self.chartview = QChartView(self.chart)
        self.chartview.setChart(self.chart)
        self.chartview.setRubberBand(QChartView.HorizontalRubberBand); #Right click to zoom out. To specify the zooming area, create a rubber band around the data points you wish to zoom. 

        central_widget = QtWidgets.QWidget()        
        lay = QtWidgets.QVBoxLayout(central_widget)
        lay.addWidget(self.chartview)

        self.setCentralWidget(central_widget)

        self.show()


app = QApplication(sys.argv)
window = Window()
sys.exit(app.exec_())

Вывод программы:

Желаемый выход:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...