gpt4 book ai didi

qt - 如何明确设置 QChart 轴刻度?

转载 作者:行者123 更新时间:2023-12-04 04:20:50 26 4
gpt4 key购买 nike

使用 Zoom Line Example我做了一个 Python QChartView可以使用箭头键滚动并使用加号和减号键缩放的类。 (见下面我的代码)。

当我向左滚动时,我希望网格线和轴刻度滚动与数据相同的量。但是,只有数据(QLineSeries)向左滚动。 5 条网格线保持在相同位置,但它们的刻度值已更新。这是不可取的,因为新的刻度值可以是任何值。

我查看了文档,但找不到如何使网格与数据一起滚动。我错过了什么吗?

我还希望能够将刻度设置为显式值(以便我可以自己实现滚动行为)。是否可以将轴刻度值设置为特定值?

我的示例代码:

import sys
from math import pi, sin, sqrt

from PyQt5.QtChart import QLineSeries, QChart, QChartView
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication

class ZoomPanChartView(QChartView):
""" QChartView that can zoom/pan with the keys
"""
def __init__(self, chart):
super().__init__(chart)

self.zoomFactor = sqrt(2) # QCharts default is 2
self.panPixels = 10

def keyPressEvent(self, keyEvent):
""" Panning (scrolling) is done with the arrow keys.
Zooming goes with the plus and minus keys.
The '=' key resets.
"""
key = keyEvent.key()

if key == Qt.Key_Equal:
self.chart().zoomReset()
if key == Qt.Key_Plus:
self.chart().zoom(self.zoomFactor)
elif key == Qt.Key_Minus:
self.chart().zoom(1/self.zoomFactor)
elif key == Qt.Key_Left:
self.chart().scroll(-self.panPixels, 0)
elif key == Qt.Key_Right:
self.chart().scroll(+self.panPixels, 0)
elif key == Qt.Key_Up:
self.chart().scroll(0, +self.panPixels)
elif key == Qt.Key_Down:
self.chart().scroll(0, -self.panPixels)
elif key == Qt.Key_0:
self.chart().axisX().applyNiceNumbers() # changes the range
else:
super().keyPressEvent(keyEvent)


def main():
app = QApplication(sys.argv)
chart = QChart()

series = QLineSeries()
for i in range(0, 100):
x = i * pi / 20
y = sin(x)
series.append(x, y)

chart.addSeries(series)
chart.createDefaultAxes()
chart.axisY().setRange(-1, 1)
chart.legend().hide()

chartView = ZoomPanChartView(chart)
chartView.show()
chartView.resize(400, 300)
sys.exit(app.exec_())

if __name__ == "__main__":
main()

最佳答案

您可以使用 QCategoryAxis 在您想要的位置放置刻度:

初始化:

ch = self.chView.chart()
self.chartAxisX = QCategoryAxis(labelsPosition=QCategoryAxis.AxisLabelsPositionOnValue, startValue=0.0)
ch.setAxisX(self.chartAxisX)
self.chartAxisY = QCategoryAxis(labelsPosition=QCategoryAxis.AxisLabelsPositionOnValue, startValue=0.0)
ch.setAxisY(self.chartAxisY)

添加系列:
        ch.addSeries(s)
s.attachAxis(self.chartAxisX)
s.attachAxis(self.chartAxisY)

将刻度设置为 5 的倍数:
        for s in self.chartAxisX.categoriesLabels():
self.chartAxisX.remove(s)
for i in range(0, int(max_x_value) + 1, 5):
self.chartAxisX.append(str(i), i)
self.chartAxisX.setRange(0.0, max_x_value)

或者在任何区间使用这个通用函数:
def format_axis(axis, min_value, max_value, step):
for s in axis.categoriesLabels():
axis.remove(s)
axis.setStartValue(min_value)
for i in range(ceil(min_value / step), floor(max_value / step) + 1):
v = i * step
axis.append('%g' % v, v)
axis.setRange(min_value, max_value)

format_axis(self.chartAxisX, -1.1, 0.98, 0.25)

关于qt - 如何明确设置 QChart 轴刻度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43005739/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com