python - QScatterSeries 在 QCharts 上绘制时点不可见
问题描述
我正在尝试使用 QScatterSeries 绘制一个 numpy 数组,但是只更新轴并且不显示点。我不确定为什么它不起作用。
- 投影窗口.py
from PySide2.QtCore import Qt
from PySide2.QtWidgets import QWidget, QHBoxLayout
from PySide2.QtGui import QColor, QPen
from PySide2.QtCharts import QtCharts
class ProjectionWindow(QWidget):
"""
TODO
"""
def __init__(self, parent=None) -> 'None':
super().__init__()
self.setWindowTitle('Projection')
self.resize(800, 800)
self.chart = QtCharts.QChart()
self.chart_view = QtCharts.QChartView(self.chart)
self.layout = QHBoxLayout(self)
self.layout.addWidget(self.chart_view)
self.setLayout(self.layout)
self.show()
def loadCharts(self, data: 'ndarray') -> 'None':
points = QtCharts.QScatterSeries()
points.setMarkerSize(2.0)
for i in range(data.shape[0]):
points.append(data[i, 0], data[i, 1])
self.chart.addSeries(points)
self.chart.createDefaultAxes()
self.chart.show()
这是我打电话时的当前结果
- 主文件
import sys
import numpy as np
from PySide2.QtWidgets import QApplication
from ui.projectionwindow import ProjectionWindow
if __name__ == "__main__":
app = QApplication(sys.argv)
data = np.array([[1,2],
[3,4]])
window = ProjectionWindow(app)
window.loadCharts(data)
sys.exit(app.exec_())
解决方案
您有 2 个错误:
- markerSize 非常小,肉眼无法区分。
- 首次建立系列时,QChart 采用最小矩形,因此在您的情况下它位于角落中,因此解决方案是在考虑足够余量的情况下更改轴的最小值和最大值。
def loadCharts(self, data: "ndarray") -> "None":
points = QtCharts.QScatterSeries()
points.setMarkerSize(20)
for i in range(data.shape[0]):
points.append(data[i, 0], data[i, 1])
self.chart.addSeries(points)
self.chart.createDefaultAxes()
m_x, M_x = min(data[:, 0]), max(data[:, 0])
m_y, M_y = min(data[:, 1]), max(data[:, 1])
ax = self.chart.axes(Qt.Horizontal, points)[0]
ax.setMin(m_x - 1)
ax.setMax(M_x + 1)
ay = self.chart.axes(Qt.Vertical, points)[0]
ay.setMin(m_y - 1)
ay.setMax(M_y + 1)
输出:
推荐阅读
- c# - 如何找出两个圆圈是否重叠或统一?
- django - 如何通过 MultipleChoiceField 保留序列化 JSON 的顺序
- javascript - javascript过滤方法查询
- css - 溢出-x:滚动不正确滚动
- tfs - 在远程环境 TFS2018 上发布
- selenium - 如何在不使用 initElements() 或 testng 类中的 new Operator 的情况下访问 Page Class 方法?
- excel - 指向现有工作表 Vba 的超链接
- node.js - 带有 Express 和 Mongoose 的 NodeJS 试图从另一个中间件调用一个中间件
- javascript - 无法在表格中将结果显示为 JSON 结果
- swift - NSUserDefaults:以可读格式存储仅具有属性列表兼容类型的结构/类