ValueAxis我想在 的右侧放置第二个ChartView。文档指出“轴可以放置在图表的下、上、左或右” 。
然而,我在 的文档中找不到任何属性AbstractAxis,ValueAxis或者ChartView与此相符。只有 的alignment属性AbstractAxis引起了我的注意,但它是 const 并且不能在 QML 中修改:
Invalid property assignment: "alignment" is a read-only property
我可以看到在多轴示例中有一种 C++ 方法来设置对齐方式,但我正在寻找一种 QtQuick 方法来设置对齐方式。我在这里错过了什么吗?
我的这段代码适用于高达 1000 的数据大小。现在我用 65536 个点对其进行了测试。
\n\nseries = new QLineSeries();\n\nQList<QPointF> points;\npoints.reserve(data.size());\n\nfor(std::vector<int>::size_type i = 0; i != data.size(); i++) {\n QPointF point(i, data[i]*100/max);\n points.append(point);\n}\nseries->clear();\nseries->append(points);\nRun Code Online (Sandbox Code Playgroud)\n\n并且应用程序在 1 个核心全功率运行时冻结。几分钟后我就停下来了。
\n\n如何防止 Qt 变得无响应。这个数据大小并不特殊,我希望图表视图能够处理高达百万点的数据集。
\n\n编辑:\n我测量了时间
\n\nseries->append(points);\nRun Code Online (Sandbox Code Playgroud)\n\n2000分需要1秒。这意味着大约一分钟内 > 50.000 是无法使用的。
\n\n更糟糕的是,对数刻度图
\n\nserieslog->append(points);\nRun Code Online (Sandbox Code Playgroud)\n\n2000分需要40秒。那是完全无法使用的。原因是调试消息,几乎每个点都会打印出来。
\n\n\n\n\nQtCharts::XLogYDomain::calculateGeometryPoints(const QVector&) const>; 零和负值的对数未定义。
\n
我可以用以下方法加快线性图的速度
\n\n series->setUseOpenGL(true);\nRun Code Online (Sandbox Code Playgroud)\n\n然而,对于 65536,它仍然需要 14 秒,这意味着每个点 200 \xc2\xb5s。\n仍然太多。我想要一个最低 10 Hz 的实时视频和一个实时直方图。时间必须 << 1 秒。
\n\n编辑:\n这是一个使用我的代码的工作示例
\n\n#include <QDebug>\n#include <QTime>\n#include <cmath>\n#include <stdlib.h>\n\n#include <QtCharts/QChartView>\n#include <QtCharts/QLineSeries>\n#include …Run Code Online (Sandbox Code Playgroud) 我需要创建两个图表(子图,同步)并设置尺寸,如下所示:
就像这个草图一样。
一张图表很容易创建(代码如下)。但要添加第二个子图 - 它不起作用。我尝试通过 QVBoxLayout() 添加它,但也失败了。
我找到了所需的示例,如何使用 QCharts 创建子图?但它不是用 Python 编写的(这在尝试转换为 Python 时会引起麻烦)。这里https://doc.qt.io/qt-5/qchart.html#chartType-prop也不在那里,而且它也不在Python中。
如何添加子图并指示尺寸(以像素或%为单位)?
from random import uniform
from PyQt5.QtWidgets import QApplication, QMainWindow
import sys
from PyQt5.QtChart import QChart, QChartView, QLineSeries
class Window(QMainWindow):
def __init__(self):
super().__init__()
self.setGeometry(100, 100, 680, 500)
self.create_linechart()
self.show()
def create_linechart(self):
series = QLineSeries(self)
for i in range(100):
series.append(i, uniform(0, 10))
chart = QChart()
chart.addSeries(series)
chart.createDefaultAxes()
chartview = QChartView(chart)
self.setCentralWidget(chartview)
App = QApplication(sys.argv)
window = Window()
sys.exit(App.exec_())
Run Code Online (Sandbox Code Playgroud)