为什么我的AmChart XYChart仅显示多个系列的单个工具提示?

时间:2019-04-17 18:51:14

标签: tooltip amcharts

我正在使用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)。

Single tooltip, multiple series

StackOverflow上存在许多有关相反问题的问题:当用户希望查看单个组合的工具提示时,用户会看到默认显示的多个工具提示。例如,我希望我的图表看起来像这个问题中的图表:

Amcharts 4, xychart, limiting the number of tooltips and combining infos in one tooltip

我怎么可能创建了3个系列,每个系列显示正确,每个都分配了一个工具提示,但是在悬停时只看到一个工具提示?

3 个答案:

答案 0 :(得分:1)

好的,原因是:我正在创建图表并将数据直接推送到chart.data。

事实证明,我需要将特定于系列的数据点分别推入每个系列的series.data。然后,我为每个系列获得了单独的工具提示。这里解释了这个概念:

https://www.amcharts.com/docs/v4/concepts/series/

答案 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);
}