2012-09-14 17 views
9

Sono stato in grado di modificare il colore del tratto su un grafico spline, ma i punti e la legenda non cambiano colore finché non nascondo e mostro la serie facendo clic su di esso e quindi passando il mouse su ciascuno di i punti.Modifica dinamica del colore della serie nei grafici ad alta risoluzione

ho un violino qui: http://jsfiddle.net/J56hm/2/

$(function() { 
    var chart = new Highcharts.Chart({ 
     chart: { 
      renderTo: 'container' 
     }, 
     xAxis: { 
      categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] 
     }, 

     series: [{ 
      data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]   
     }] 
    }); 

    // the button handler 
    $('#button').click(function() { 
     chart.series[0].color = "#FF0000"; 
     chart.series[0].graph.attr({ stroke: '#FF0000' }); 

     $.each(chart.series[0].data, function(i, point) { 
      point.graphic.attr({ fill: '#FF0000' }); 
     }); 
     chart.series[0].redraw(); 
     chart.redraw(); 
    }); 
});​ 

Qualsiasi idea del perché questo sta accadendo o un modo per ovviare a questo?

risposta

6

questo thread sul forum Highcharts ha una soluzione:

http://highslide.com/forum/viewtopic.php?f=9&t=7075&p=33437 con un violino http://jsfiddle.net/G5Pk7/ che lo illustra.

var chart = new Highcharts.Chart({ 
    chart: { 
     renderTo: 'container' 
    }, 
    xAxis: { 
     categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] 
    }, 

    series: [{ 
     data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]   
    }] 
}); 

$('#button').click(function() { 
    var series = chart.series[0]; 
    series.color = "#FF00FF"; 
    series.graph.attr({ 
     stroke: '#FF00FF' 
    }); 
    chart.legend.colorizeItem(series, series.visible); 
    $.each(series.data, function(i, point) { 
     point.graphic.attr({ 
      fill: '#FF00FF' 
     }); 
    }); 
    series.redraw(); 
}); 

Questa è chiaramente una soluzione sporca, ma sembra funzionare.

+0

perché consideri questa una soluzione "sporca"? Questo ha funzionato alla grande per me! – user1415427

5

Hai persino guardato la console?

ReferenceError: series is not defined
http://fiddle.jshell.net/J56hm/1/show/
Line 39

Modifica in a seguire risolto il problema

$.each(chart.series[0].data, function(i, point) { 
... 
} 

Ma ora succede il contrario, quando si passa sopra i punti va blu di nuovo Si sta tentando di manipolare direttamente l'svg che viene reso da grafici elevati impostando gli attributi del colore. Questo non è il modo corretto, in quanto il grafico alto può ridisegnare il grafico in base al suo algoritmo di rendering e tutte le modifiche potrebbero andare perse.
Dopo aver detto tutto questo, io ancora non so alcun metodo supportato in Highcharts per fare questo, aggiornerà la risposta, se vengo con qualcosa

@ jsFiddle

+0

Il mio errore con l'errore. Ero di fretta quando ho postato la domanda e non guardavo la console. La mia domanda è ancora valida, sebbene possa aver trovato un lavoro sporco, anche se ciò comporta la modifica del SVG sottostante. – Soliah

30

è semplice, è possibile utilizzare questo codice

chart.series[0].options.color = "#008800"; 
chart.series[0].update(chart.series[0].options); 
Problemi correlati