Nel grafico flessibile, Voglio disegnare qualcosa come "linee di riferimento" che sono relative a serie specifiche, quindi queste righe non sono serie indipendenti e non dovrebbero essere mostrate nella legenda. È possibile escludere alcune serie dalla legenda del grafico? Grazie!Come escludere le serie nella legenda (Flex)
risposta
È possibile escludere alcune serie dalla legenda del grafico.
Ogni classe di grafico (estensione di ChartBase) ha una proprietà legend Array di dati. Questa legendaData ha una lista di LegendItem. Se crei un nuovo array basato su legendData, ma con solo il LegendItem che desideri; quindi puoi impostare quell'array come dataProvider per la tua legenda.
Inoltre, è possibile creare il proprio array di LegendItem basato su LegendItems creato da zero. E usa quella matrice come dataProvider per la legenda.
Per esempio, qui mi mostra solo la prima e la terza serie nel mio leggenda:
<mx:Script>
<![CDATA[
private function cc(event:Event):void
{
var newArray:Array = new Array();
newArray.push(myChart.legendData[0]);
newArray.push(myChart.legendData[2]);
myActionScriptLegend.dataProvider = newArray;
}
]]>
</mx:Script>
<mx:ColumnChart id="myChart">
<mx:series>
<mx:ColumnSeries id="series0"/>
<mx:ColumnSeries id="series1"/>
<mx:ColumnSeries id="series2"/>
</mx:series>
</mx:ColumnChart>
<mx:Legend dataProvider="{[myChart.legendData[0],myChart.legendData[2]]}" />
<mx:Legend id="myActionScriptLegend" creationComplete="cc(event)" />
http://livedocs.adobe.com/flex/3/langref/mx/charts/chartClasses/ChartBase.html#legendData
http://livedocs.adobe.com/flex/3/langref/mx/charts/LegendItem.html
http://livedocs.adobe.com/flex/3/html/charts_displayingdata_12.html#330954
ho elaborato sulla risposta di Luis B per rendere questo riflettere in modo dinamico su il fornitore di dati del linechart. In questo modo la legenda mostra solo quali campi sono disponibili nel grafico. Abbastanza elegante
Ecco quello che mi è venuta, e funziona bene:
protected function onUpdateLinechartComplete(e:FlexEvent):void
{
//empty legend for fresh display
var legendArray:Array = new Array();
legend1.dataProvider = legendArray;
//filter Legend data so that only LineSeries with data can be shown
for(var i:int=0; i< linechart1.legendData.length; i++) {
//if data is found in the line series, let's add it to the chart legend data provider, so it can be displayed in the legend
if (linechart1.legendData[i].element.items.length != 0) {
legendArray.push(linechart1.legendData[i]);
}
}
legend1.dataProvider = legendArray;
legend1.direction = "vertical";
}
//in the page Initialize function, I add a listener event to the linechart component for when the legend update completes so it can filter lineseries on the legend's dataprovider in [onUpdateLegendComplete]
linechart1.addEventListener(FlexEvent.UPDATE_COMPLETE, onUpdateLinechartComplete);
ho finito per dover utilizzare un EventHandler e allegando un listener di eventi al Linechart stesso. Questo perché ho riscontrato "condizioni di gara" con il fornitore di dati della legenda. Qualche cosa funzionerebbe, a volte no. Utilizzando l'evento Listener ha eliminato questo problema e filtra solo la legenda quando il grafico ha completato il caricamento dei suoi dati.
SENTIRE GRATIS PER AVVIARE QUESTA RISPOSTA, FLEX FLEX !!
Mi piace. Probabilmente l'altra risposta è veramente corretta per l'OP, ma questo è ciò di cui ho bisogno. – Fletch
OK un'altra versione della risposta di devtron, se si dispone già di una classe Linechart personalizzato in ogni caso, come ho, poi mettere questo in:
[Bindable] public var activeLegendData:Array;
// this goes in an initialize handler
addEventListener(FlexEvent.UPDATE_COMPLETE, onUpdateChartComplete);
protected function onUpdateChartComplete(e:FlexEvent):void {
activeLegendData = new Array();
for(var i:int=0; i < legendData.length; i++) {
if (legendData[i].element.items.length != 0) {
activeLegendData.push(legendData[i]);
}
}
}
Poi si vincolare il proprio dataprovider leggenda per linechart.activeLegendData invece di Linechart.
Il vantaggio di questa soluzione rispetto a Devtron è che non è necessario riscrivere il codice ogni volta che si inserisce un altro modulo nella propria app.
Non vedo come questo sia diverso dalla mia risposta, a parte il fatto che non leghi esplicitamente la leggenda? – D3vtr0n
Un'altra alternativa ...
derivare una nuova classe da una delle classi serie di grafico, quindi sovrascrivere il getter per legendData()
e restituire un array vuoto. Ecco un esempio per PlotSeries:
public class PlotSeriesNoLegend extends PlotSeries
{
public function PlotSeriesNoLegend()
{
super();
}
override public function get legendData():Array /* of LegendData */
{
return [ ];
}
}
Alcuni commenti sulle risposte precedenti. Quando ci si riferisce a creare un nuovo array per usarlo come legenda, fare attenzione perché non è come descritto.Per me funziona in questo modo:
Quando si tenta di accedere a un valore esistente in pie.legendData, è necessario farlo in questo modo: pie.legendData [0] [0] o pie.legendData [0] [1] ]
Inoltre, per ottenere questi dati in un nuovo array e utilizzarlo per creare la nuova legenda, è necessario attendere che la torta sia già stata creata.
Per questo uso semplicemente l'evento di rendering della torta.
Spero che ti aiuti.
- 1. Controllo grafico Microsoft: impedisce la visualizzazione di serie nella legenda
- 2. Legenda personalizzata/immagine come legenda nella mappa del prospetto
- 3. Spazi verticali nella legenda
- 4. Frazione nella legenda, più colori
- 5. ggplot2: Linea tratteggiata nella legenda
- 6. Aggiungi simbolo p nella legenda trama R
- 7. Cambia dimensione carattere nella legenda
- 8. Pyplot: mostra solo le prime 3 righe nella legenda
- 9. Inserisci immagine nella legenda matplotlib
- 10. Legenda del gradiente nella base
- 11. R: posizionamento della legenda e lunghezza delle righe nella legenda
- 12. Delphi: come escludere le unità dal debugger?
- 13. La legenda del grafico UI di Kendo può rimuovere automaticamente le serie vuote?
- 14. Come escludere le migrazioni Sud da Pylint?
- 15. Nascondere una serie Highcharts senza utilizzare la legenda
- 16. Escludere uno o più elementi da panda Serie
- 17. Ordinamento di una serie di array in Flex
- 18. grafico flottaggio, utilizzare la legenda per attivare/disattivare la serie
- 19. problema con la legenda di r, come cambiare la dimensione del testo nella legenda
- 20. Chart.js: nascondere la serie facendo clic sulla legenda
- 21. R - combinato geom_vline e geom_smooth nella legenda
- 22. Attiva o disattiva le serie di dati facendo clic sulla legenda nel grafico a torta?
- 23. forma e carattere sovrapposti nella legenda ggplot
- 24. Grafico Flot dinamico - mostra le serie di nascondigli cliccando sul legenda testo o casella sul grafico
- 25. Inserimento personalizzato della legenda spplot nella mappa
- 26. controllo della legenda jqplot per serie. Serie showLabel non funziona con EnhancedLegendRenderer
- 27. Come escludere le cartelle .svn con robocopy
- 28. Matstotlib: Lunghezza lineare orizzontale nella legenda
- 29. Google Charts Mostra elementi vuoti nella legenda
- 30. Stili della linea di unione nella legenda MATLAB
Grazie! È anche disponibile in ActionScript? –
Ho fornito una seconda legenda (id = "myActionScriptLegend"), che fa la stessa cosa in ActionScript. Spero possa aiutare. –
Grazie Luis, mi ha aiutato a risolvere il problema che stava uccidendo molto del mio tempo – Anoop