2
votes

Pourquoi mon AmChart XYChart n'affiche-t-il qu'une seule info-bulle pour plusieurs séries?

J'utilise AmCharts v4 pour créer un XYChart avec 3 séries. Lorsque chaque série est créée, j'attribue une info-bulle:

series.tooltipText = "{name}: [bold]{valueY}[/]";

Cependant, le graphique finit par n'afficher qu'une seule info-bulle (Température: -50).

 Une info-bulle, plusieurs séries

Il y a de nombreuses questions sur StackOverflow sur le problème inverse: les utilisateurs voient plusieurs info-bulles affichées par défaut, quand ils le souhaitent voir une seule info-bulle combinée. Par exemple, je veux que mon graphique ressemble à celui de cette question:

Amcharts 4, xychart, limitant le nombre d'infobulles et combinant les infos dans une infobulle

Comment est-il possible que je avez créé 3 séries, chacune est affichée correctement, chacune a une info-bulle attribuée, mais je ne vois qu'une seule info-bulle en survolant?


0 commentaires

3 Réponses :


2
votes

D'accord, l'explication est la suivante: je créais un graphique et je transmettais mes données directement à chart.data.

Il s'avère que je dois pousser les points de données spécifiques à la série vers series.data individuellement pour chaque série. Ensuite, j'obtiens une info-bulle distincte pour chaque série. Ce concept est expliqué ici:

https://www.amcharts.com/docs/v4/concepts/ série /


2 commentaires

Im face au même problème, pouvez-vous poster le code de votre solution?


@NestorPerez désolé, c'était pour un travail précédent donc c'est propriétaire. Faites-vous ce que je suggère dans cet article? Créer d'abord le graphique et pousser les points de données individuellement?



0
votes

J'ai eu le même problème et je le résolve en ajoutant

widget.chart.data = datas;

au lieu de

widget.chart.series.getIndex(j).data = datas;


0 commentaires

0
votes

Je trouve une solution peut-être que cela aide a été écrite dans le cadre angulaire. J'ai écrit une fonction générale qui télécharge les données du graphique une par une.

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


0 commentaires