我正在使用AmCharts v4创建3系列的XYChart。创建每个系列后,我分配一个工具提示:
class myWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(myWindow, self).__init__(parent, QtCore.Qt.WindowStaysOnTopHint)
self.setupUi(self)
self.show()
self.move(0,0)
self.threadpool = QThreadPool()
self.pushButton.clicked.connect(self.btnClicked)
def btnClicked(self):
user = self.userEdit.text()
password = self.passwordEdit.text()
url = self.urlEdit.text()
worker = Worker(user,password,url)
worker.signals.status.connect(self.statusUpdate)
worker.signals.progress.connect(self.progressUpdate)
self.threadpool.start(worker)
def closeEvent(self, *args, **kwargs):
super(QtWidgets.QMainWindow, self).closeEvent(*args, **kwargs)
print('Closed')
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
ex = myWindow()
sys.exit(app.exec_())
但是,该图表最终仅显示一个工具提示(温度:-50)。
StackOverflow上存在许多有关相反问题的问题:当用户希望查看单个组合的工具提示时,用户会看到默认显示的多个工具提示。例如,我希望我的图表看起来像这个问题中的图表:
Amcharts 4, xychart, limiting the number of tooltips and combining infos in one tooltip
我怎么可能创建了3个系列,每个系列显示正确,每个都分配了一个工具提示,但是在悬停时只看到一个工具提示?
答案 0 :(得分:1)
好的,原因是:我正在创建图表并将数据直接推送到chart.data。
事实证明,我需要将特定于系列的数据点分别推入每个系列的series.data。然后,我为每个系列获得了单独的工具提示。这里解释了这个概念:
答案 1 :(得分:0)
我遇到了同样的问题,我通过添加
解决了widget.chart.series.getIndex(j).data = datas;
代替
widget.chart.data = datas;
答案 2 :(得分:0)
我找到了一个可能对它有用的解决方案,该解决方案是用Angular框架编写的。我编写了一个通用功能,该功能可以一张一张地上传图表数据。
private uploadChartData(readings: Reading[], dataFieldX: string, dataFieldY: string): void {
const seriesIndex: number = this.findSeriesIndex(dataFieldY);
for (const reading of readings) {
const chartData = {
[dataFieldX]: reading.timeStamp,
[dataFieldY]: reading.value
};
this.addOneChartData(chartData, seriesIndex);
}
}
private findSeriesIndex(seriesName: string): number {
for (let i = 0; i < this.chart.series.values.length; i++) {
if (this.chart.series.values[i].dataFields.valueY === seriesName) {
return i;
}
}
return 0;
}
private addOneChartData(chartData: any, seriesIndex: number): void {
this.chart.addData(chartData);
this.chart.series.getIndex(seriesIndex).addData(chartData);
}