控制背景图像/图案的定位

时间:2013-06-25 18:06:52

标签: highcharts

我的最终目标是创建一个“区域范围”图表,该图表使用下面的示例背景图像,使得y轴上的给定值(例如56)始终由图像中的相同颜色/位置表示。

正如您在下面的小提琴中所看到的,我可以使用highcharts创建一个“区域范围”图表,该图表使用任意图像填充/遮蔽范围内的区域。但是,即使两个图表具有不同的(y轴)值,颜色也完全相同; 6月份“图1”的峰值与“图2”的颜色相同,即使它们的值不同(301对401)。

http://jsfiddle.net/malonso/YwuqD/1/

与填充颜色/图案有关的代码:

   
    fillColor: {
        pattern: 'http://i.stack.imgur.com/dezhE.png',
        width: 10,
        height: 300
    }

是否有可能以某种方式指定背景图像应覆盖y轴上的特定范围?

示例图片:

enter image description here

更新:出于某种原因,在浏览器以外的浏览器中查看时,图表背景不再显示为渐变,因此我附上了小提琴的截图:

enter image description here

2 个答案:

答案 0 :(得分:3)

渲染图表时请使用:

/*********************************************************
* Generate the example chart
*********************************************************/
   
var chart = new Highcharts.Chart({

    chart: {
        renderTo: 'container'
    },

    title: {
        text: 'Chart 1'
    },

    xAxis: {
        categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
    },
    series: [{
        type: 'arearange',
        data: testData,
        fillColor: {
            pattern: 'http://i.stack.imgur.com/dezhE.png',
            width: 10,
            height: 300 + Math.round(testData[0][0] / 100) * 100
        }
    }]

});

var chart2 = new Highcharts.Chart({

    chart: {
        renderTo: 'container2'
    },

    title: {
        text: 'Chart 2'
    },

    xAxis: {
        categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
    },
    series: [{
        type: 'arearange',
        data: testData2,
        fillColor: {
            pattern: 'http://i.stack.imgur.com/dezhE.png',
            width: 10,
            height: 300 +  Math.round(testData2[0][0] / 100) * 100
        }
    }]

});

它将Y轴的起点(Math.round(testData [0] [0] / 100)* 100)添加到图像的高度。

(您提供的代码只有轻微的改动)

charts

差异有点微妙

答案 1 :(得分:3)

您还可以尝试在渲染图表后更新图像的位置。唯一的限制是知道一个点(例如,模式顶部的第一个像素应该是值500)。请参阅示例:http://jsfiddle.net/YwuqD/9/

首先在创建模式时为将来的更新添加引用:

   
this.upgradeGradients = image;

然后在加载时使用:

        load: function() {
            var chart = this,
                image = chart.renderer.upgradeGradients,
                top = chart.yAxis[0].toPixels(500), //500 is the top of image - only for example value
                diff = chart.plotTop + top;

            image.attr({y : diff});
        }