在同一个qtchart上绘制烛台和5天平均线,但给出两个x轴图

时间:2018-05-27 03:41:08

标签: python pyqt pyqt5 candlestick-chart qtchart

我想在同一个qchart上绘制烛台和5天平均线,它应该显示一个 x轴,但是给出两个 x轴。这是代码和情节。

import sys
from PyQt5.QtChart import (QCandlestickSeries, QChart, QChartView)
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtCore import Qt
from PyQt5 import QtChart as qc

"""
data to be load just like the following:

num, open, high, low, close, ma5
1    7380  7520  7380 7510   7324 
2    7520  7580  7410 7440   7372
3    7440  7650  7310 7520   7434
4    7450  7640  7450 7550   7480
5    7510  7590  7460 7490   7502
6    7500  7590  7480 7560   7512
7    7560  7830  7540 7800   7584
... ...
"""

app = QApplication(sys.argv)
#
series = QCandlestickSeries()
series.setDncreasingColor(Qt.red)
series.setIecreasingColor(Qt.green)

ma5 = qc.QLineSeries()  # 5-days average data line
candle_x_axis_label = []  # stores str type data

# in a loop,  series and ma5 append corresponding data
for num, o, h, l, c, m in data:
    series.append(QCandlestickSet(o, h, l, c))
    ma5.append(m)
    candle_x_axis_label.append(str(num))

chart = QChart()

chart.addSeries(series)  # candle
chart.addSeries(ma5)  # ma5 line

chart.setAnimationOptions(QChart.SeriesAnimations)
chart.createDefaultAxes()
chart.legend().hide()

# here is the point
# tm is str list, just like '1, 2, 3, ..., n'
chart.axes(Qt.Horizontal)[0].setCategories(candle_x_axis_label)

#
chartview = QChartView(chart)
ui = QMainWindow()
ui.setGeometry(50, 50, 500, 300)
ui.setCentralWidget(chartview)
ui.show()
sys.exit(app.exec_())

和情节 enter image description here

我检查qtchart代码,找出烛台x轴的类类型是QBarCategoryAxis,但是ma5 x轴的类类型是QValueAxis。那么如何去除两个x轴?

1 个答案:

答案 0 :(得分:4)

您只需获取与QAbstractAxis的X轴相对应的QLineSeries并将其隐藏setVisible(False),为此您必须使用QChart::axisX()

chart.axisX(ma5).setVisible(False)

完整代码:

import sys
from PyQt5.QtChart import QCandlestickSeries, QChart, QChartView, QCandlestickSet
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtCore import Qt, QPointF
from PyQt5 import QtChart as qc

data = ((1, 7380, 7520, 7380, 7510, 7324), 
    (2, 7520, 7580, 7410, 7440, 7372),
    (3, 7440, 7650, 7310, 7520, 7434),
    (4, 7450, 7640, 7450, 7550, 7480),
    (5, 7510, 7590, 7460, 7490, 7502),
    (6, 7500, 7590, 7480, 7560, 7512),
    (7, 7560, 7830, 7540, 7800, 7584))


app = QApplication(sys.argv)
#
series = QCandlestickSeries()
series.setDecreasingColor(Qt.red)
series.setIncreasingColor(Qt.green)

ma5 = qc.QLineSeries()  # 5-days average data line
tm = []  # stores str type data

# in a loop,  series and ma5 append corresponding data
for num, o, h, l, c, m in data:
    series.append(QCandlestickSet(o, h, l, c))
    ma5.append(QPointF(num, m))
    tm.append(str(num))

chart = QChart()

chart.addSeries(series)  # candle
chart.addSeries(ma5)  # ma5 line

chart.setAnimationOptions(QChart.SeriesAnimations)
chart.createDefaultAxes()
chart.legend().hide()

chart.axisX(series).setCategories(tm)
chart.axisX(ma5).setVisible(False)

chartview = QChartView(chart)
ui = QMainWindow()
ui.setGeometry(50, 50, 500, 300)
ui.setCentralWidget(chartview)
ui.show()
sys.exit(app.exec_())

enter image description here