我正在尝试在 qtcharts 上拖动 LineSeries 上的一个点。这是我的代码:
import QtQuick 2.0
import QtCharts 2.0
Item {
anchors.fill: parent
ChartView {
title: "Two Series, Common Axes"
anchors.fill: parent
ValueAxis {
id: axisX
min: 0
max: 10
tickCount: 5
}
ValueAxis {
id: axisY
min: -0.5
max: 1.5
}
LineSeries {
id: series1
axisX: axisX
axisY: axisY
onPressed: console.log("Pressed: " + point.x + ", " + point.y);
onReleased: console.log("Released: " + point.x + ", " + point.y);
}
}
// Add data dynamically to the …Run Code Online (Sandbox Code Playgroud) 我能够使用 Python 中的 QtCharts 库生成图表,但我似乎不知道如何向我的图表添加轴标签...
我看到了 QValueAxis 的 setLabelFormat() 功能,但没有看到如何设置文本本身。我确信我缺少一些简单的东西。
这是我必须生成图表的代码:
def plotLossesChart(self):
set0 = QBarSet('Conduction Loss')
set1 = QBarSet('Switching Loss')
set0.append([random.randint(0, 10) for i in range(5)])
set1.append([random.randint(0, 10) for i in range(5)])
series = QStackedBarSeries()
series.append(set0)
series.append(set1)
chart = QChart()
chart.addSeries(series)
chart.setTitle('Loss Summary')
chart.setAnimationOptions(QChart.SeriesAnimations)
months = ('Upper FET', 'Lower FET', 'Driver', 'Inductor', 'Cap ESR')
axisX = QBarCategoryAxis()
axisX.append(months)
axisY = QValueAxis()
axisY.setRange(0, 15)
chart.addAxis(axisX, Qt.AlignBottom)
chart.addAxis(axisY, Qt.AlignLeft)
chart.legend().setVisible(True)
chart.legend().setAlignment(Qt.AlignBottom)
return chart
def plotEfficiencyChart(self):
series = QLineSeries()
load = [0, …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我QChart用来显示折线图。不幸的是,Qt Charts 不支持使用鼠标滚轮缩放和通过鼠标滚动等基本功能。是的,有橡皮筋功能,但仍然不支持滚动等,这对用户来说不是那么直观。另外我只需要缩放 x 轴,某种setRubberBand(QChartView::HorizontalRubberBand)但使用鼠标滚轮。到目前为止,在深入研究之后,QChartView我使用了以下解决方法:
class ChartView : public QChartView {
protected:
void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE
{
QRectF rect = chart()->plotArea();
if(event->angleDelta().y() > 0)
{
rect.setX(rect.x() + rect.width() / 4);
rect.setWidth(rect.width() / 2);
}
else
{
qreal adjustment = rect.width() / 2;
rect.adjust(-adjustment, 0, adjustment, 0);
}
chart()->zoomIn(rect);
event->accept();
QChartView::wheelEvent(event);
}
}
Run Code Online (Sandbox Code Playgroud)
这有效,但放大然后缩小不会导致相同的结果。有一个小的偏差。调试后我发现chart()->plotArea()总是返回相同的矩形,所以这个解决方法没用。
有没有办法只获得可见区域的矩形?或者可能有人可以为我指出正确的解决方案,如何通过鼠标为 QChartView 进行缩放/滚动?
我想在 QChartView 中显示 QPolarChart。
除了 QPolarChart 之外,我不会添加标题或图例。不幸的是,当我添加图表时,QPolarChart 周围有一些空白。我猜这是标题和/或图例的空间......
有没有办法减少这个空间?
我已经用过
chart->layout()->setContentsMargins(0, 0, 0, 0);
chart->setBackgroundRoundness(0);
Run Code Online (Sandbox Code Playgroud)
这有点帮助。
我想减少红边:
我想在同一qchart上绘制烛台和5天平均线,它应该显示一个 x轴,但是给出两个 x轴。这是代码和情节。
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 …Run Code Online (Sandbox Code Playgroud) 我正在使用 Qt 5.9 编写一个应用程序,顶部是 C++ main 和 QML UI。一切正常(包括从 C++ 向 QML 发送信号)但是当我添加ChartView到 UI 时,我看到了崩溃。的精简版ChartView如下所示;当我从代码中省略它时,没有崩溃。
ChartView {
id: _chartView
LineSeries {
name: "avgZ"
XYPoint { x: 0; y: 0}
}
}
Run Code Online (Sandbox Code Playgroud)
这是堆栈跟踪(通过优秀的向后cpp):
Stack trace (most recent call last):
#27 Object "", at 0xffffffffffffffff, in
#26 Object "/home/eudoxos/pw/carxx/build/main-qt", at 0x561cceac54a9, in _start
#25 Source "/build/glibc-OTsEL5/glibc-2.27/csu/../csu/libc-start.c", line 310, in __libc_start_main [0x7fafdf218b96]
#24 Object "/home/eudoxos/pw/carxx/build/main-qt", at 0x561cceac849b, in main
#23 Object "/usr/lib/x86_64-linux-gnu/libQt5Qml.so.5", at 0x7fafe297761c, in QQmlApplicationEngine::load(QUrl …Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个使用 QML QCharts 来可视化数据的应用程序。该程序在启动时甚至在窗口出现之前就崩溃了。我在 macOS 和 Windows 10 上都进行了尝试,结果相同。我在下面提供了一个最低限度的工作示例。
main.py:
import sys
from PySide2.QtGui import QGuiApplication
from PySide2.QtQml import QQmlApplicationEngine
from PySide2.QtCore import QUrl
import qml_rc
if __name__ == "__main__":
app = QGuiApplication(sys.argv)
engine = QQmlApplicationEngine()
engine.load(QUrl("qrc:/main.qml"))
if not engine.rootObjects():
sys.exit(-1)
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
main.qml:
import QtQuick 2.13
import QtQuick.Controls 2.13
import QtCharts 2.13
ApplicationWindow {
visible: true
// Example taken from: https://doc.qt.io/qt-5/qtcharts-qmlchart-example.html
ChartView {
id: chart
title: "Top-5 car brand shares in Finland"
anchors.fill: parent
legend.alignment: Qt.AlignBottom
antialiasing: true …Run Code Online (Sandbox Code Playgroud) 有没有办法为 QCategoryAxis 中的每个标签分配颜色?
我知道我可以有一个图例,但我更喜欢在轴上设置颜色以匹配我所拥有的线条的颜色。我想更改标记(类别文本)本身的颜色,而不是刻度线。请注意,我想为每个轴标签设置不同的颜色。
尝试使用axisY.setLabelsBrush(QBrush(Qt::red));
但是这为所有标签设置了相同的颜色。
使用 Qt 5.10
我想让饼图的每一片都成为我选择的颜色。我需要知道 QPieSlice 的 snytax(如果这是我使用的)以及如何将颜色附加到馅饼的特定切片上。例如,我希望“自动”切片为“#00FF00”,“就业”切片为“#1A8CFF”等。
下面是我的馅饼的碎片。我尝试过各种事情,例如:
QPieSlice.setBrush(QPieSlice.setColor(QColor('#00FF00')))
Run Code Online (Sandbox Code Playgroud)
但它不起作用,即使它起作用了,我也不知道如何将它附加到特定的切片以及将它放在哪里。
series.append("Auto", self.expensesWindow.piechart[0])
series.append("Employment", self.expensesWindow.piechart[1])
series.append("Insurance", self.expensesWindow.piechart[2])
series.append("Household", self.expensesWindow.piechart[3])
series.append("Housing", self.expensesWindow.piechart[4])
series.append("Entertainment", self.expensesWindow.piechart[5])
series.append("Utilities", self.expensesWindow.piechart[6])
series.append("Other", self.expensesWindow.piechart[7])
Run Code Online (Sandbox Code Playgroud)