You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySide6 Qt Charts中设置Y轴自定义刻度点的技术咨询

PySide6 Qt Charts中设置Y轴自定义刻度点的技术咨询

嘿,我明白你要做的事了——你有一条平行于X轴的直线图表,现在想在Y轴上手动指定几个刻度点,比如(0,3)、(0,17)这些位置,对吧?其实要实现这个很简单,我们只需要调整Y轴的刻度类型,然后手动传入自定义的刻度值列表就行。

先看你原来的代码,你用了TicksDynamic和setTickInterval,这是让Qt自动根据间隔生成刻度,但我们要自定义的话,得改成固定刻度模式。下面是修改后的完整可运行代码,我会在关键改动处做说明:

from PySide6.QtWidgets import QWidget, QVBoxLayout, QApplication
from PySide6.QtCharts import QLineSeries, QChart, QChartView, QValueAxis
from PySide6.QtGui import Qt, QPen
from PySide6.QtCore import QPointF
import sys


class ChartWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(700, 500)
        self.chart = QChart()
        self.chart.legend().setVisible(False)
        
        # 处理Y轴的自定义刻度——核心改动在这里
        self.y_axis = QValueAxis()
        self.y_axis.setRange(0, 20)
        self.y_axis.setLabelFormat("%d")
        # 把动态生成刻度改成固定刻度模式,这样我们就能手动指定刻度点了
        self.y_axis.setTickType(QValueAxis.TickType.TicksFixed)
        # 传入你需要的自定义刻度值列表,包含你要的0、3、17,再补充了几个常用刻度让显示更完整
        custom_ticks = [0, 3, 5, 10, 15, 17, 20]
        self.y_axis.setTickVector(custom_ticks)
        # 同步设置标签向量,确保每个刻度点对应正确的标签(这里标签和刻度值一致,显式设置更稳妥)
        self.y_axis.setLabelVector([str(tick) for tick in custom_ticks])
        
        # 补全X轴的基础设置,让图表能正常显示
        self.x_axis = QValueAxis()
        self.x_axis.setRange(0, 10)
        self.x_axis.setLabelFormat("%d")
        
        # 添加你需要的平行于X轴的直线(这里用y=5的直线做示例,你可以改成自己需要的数值)
        series = QLineSeries()
        series.append(QPointF(0, 5))
        series.append(QPointF(10, 5))
        # 给直线设置个显眼的样式,方便查看
        pen = QPen(Qt.red, 2)
        series.setPen(pen)
        
        # 把系列和坐标轴绑定到图表上
        self.chart.addSeries(series)
        self.chart.addAxis(self.y_axis, Qt.AlignLeft)
        self.chart.addAxis(self.x_axis, Qt.AlignBottom)
        series.attachAxis(self.x_axis)
        series.attachAxis(self.y_axis)
        
        # 把图表放到视图里,再设置布局
        chart_view = QChartView(self.chart)
        chart_view.setRenderHint(Qt.Antialiasing)
        layout = QVBoxLayout()
        layout.addWidget(chart_view)
        self.setLayout(layout)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = ChartWindow()
    window.show()
    sys.exit(app.exec())

运行这个代码后,你就能看到Y轴上0、3、17这些你指定的位置都显示了刻度,完全符合你的需求。要是之后想调整刻度点,只需要修改custom_ticks列表里的数值就可以,非常灵活。另外我还补全了X轴的设置和平行X轴的直线系列,让整个例子能直接跑起来,你可以根据自己的需求调整直线的Y值。

备注:内容来源于stack exchange,提问作者Garp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 12:03:07