Note that there are some explanatory texts on larger screens.

plurals
  1. POHighcharts.js setting a threshold value for changing column color
    primarykey
    data
    text
    <p>I'm wondering if someone can help me adapt this Highcharts line graph: <a href="http://jsfiddle.net/highcharts/PMyHQ/" rel="nofollow">http://jsfiddle.net/highcharts/PMyHQ/</a> to a column graph <strong>WHILE</strong> still maintaining the threshold coloring (red for value>0; blue for value&lt;0).</p> <p>The problem is if you simply change the graph type, <code>type:'column'</code>, then the threshold-based coloring is lost and all the columns are blue.</p> <p>The function that does the color change is <code>applyGraphGradient()</code>. I can't figure out how to change this function to preserve the threshold-based coloring.</p> <pre><code>/** * Event handler for applying different colors above and below a threshold value. * Currently this only works in SVG capable browsers. A full solution is scheduled * for Highcharts 3.0. In the current example the data is static, so we don't need to * recompute after altering the data. In dynamic series, the same event handler * should be added to yAxis.events.setExtremes and possibly other events, like * chart.events.resize. */ function applyGraphGradient() { // Options var threshold = 0, colorAbove = '#EE4643', colorBelow = '#4572EE'; // internal var series = this.series[0], i, point; if (this.renderer.box.tagName === 'svg') { var translatedThreshold = series.yAxis.translate(threshold), y1 = Math.round(this.plotHeight - translatedThreshold), y2 = y1 + 2; // 0.01 would be fine, but IE9 requires 2 // Apply gradient to the path series.graph.attr({ stroke: { linearGradient: [0, y1, 0, y2], stops: [ [0, colorAbove], [1, colorBelow] ] } }); } // Apply colors to the markers for (i = 0; i &lt; series.data.length; i++) { point = series.data[i]; point.color = point.y &lt; threshold ? colorBelow : colorAbove; if (point.graphic) { point.graphic.attr({ fill: point.color }); } } // prevent the old color from coming back after hover delete series.pointAttr.hover.fill; delete series.pointAttr[''].fill; } // Initiate the chart var chart = new Highcharts.Chart({ chart: { renderTo: 'container', events: { load: applyGraphGradient }, defaultSeriesType : 'column' }, title: { text: 'Average monthly temperature' }, yAxis: { plotLines: [{ value: 0, color: 'silver', width: 2, zIndex: 2 }], title: { text: 'Temperature (°C)' } }, xAxis: { categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] }, series: [{ name: 'Temperature (°C)', data: [-2, -3, -2, 2, 5, 9, 11, 11, 10, 8, 4, -1] }] }); ​ </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload