在同一qtchart上绘制烛台和5天平均线

在同一qtchart上绘制烛台和5天平均线

本文介绍了在同一qtchart上绘制烛台和5天平均线,但给出两个x轴图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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


的数据加载如下所示:

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天平均数据线
Candle_x_axis_label = []#存储str类型循环中的数据

#,序列和ma5追加corr对应于数据中num,o,h,l,c,m的数据

series.append(QCandlestickSet(o,h,l,c))
ma5.append(m)
Candle_x_axis_label.append(str(num))

chart = QChart()

chart.addSeries(series)#蜡烛
chart.addSeries( ma5)#ma5行

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

#这是点
#tm是str列表,就像'1、2、3,...,n'
chart.axes(Qt.Horizo​​ntal)[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_())

和情节



我检查qtchart代码,烛台x轴的类类型为QBarCategoryAxis,而ma5 x轴的类类型为QValueAxis。那么如何去除两个x轴呢?

解决方案

您只需获取与X轴相对应的 QAbstractAxis QLineSeries 并用


I want to plot candlestick and 5-days average line on the same qchart, it should show one x axis, but gives two x axis. here is the code and the plot.

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_())

and the plot

i check qtchart code, and find out the class type of candlestick x axis is QBarCategoryAxis but the class type of ma5 x axis is QValueAxis. so how to remove of the two x axis?

解决方案

You only have to obtain the QAbstractAxis corresponding to the X axis of the QLineSeries and hide it with setVisible(False), for this you must use QChart::axisX():

chart.axisX(ma5).setVisible(False)

Complete Code:

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_())

这篇关于在同一qtchart上绘制烛台和5天平均线,但给出两个x轴图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-26 16:13