如何重置Highcharts中系列的样式
How can I reset the styles given to series in Highcharts?
我正在使用Highcharts向我的网站呈现一些图形。有时,我需要从图表中删除所有系列,并向图表中添加一些新系列,因为我通过ajax请求了一些新数据。
我目前是这样做的:
var chart = $('#container').highcharts();
while(chart.series.length) {
chart.series[0].remove();
}
chart.addSeries({
data: [144.0, 176.0, 29.9, 71.5, 106.4, 129.2, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]
});
chart.addSeries({
data: [129.2, 106.4, 135.6, 95.6, 54.4, 148.5, 144.0, 176.0, 29.9, 71.5, 216.4, 194.1]
});
chart.addSeries({
data: [106.4, 129.2, 135.6, 148.5, 144.0, 176.0, 29.9, 71.5, 194.1, 95.6, 54.4, 216.4]
});
你可以在这把小提琴上看到这一点。
但我的问题是,新系列的颜色与前一系列完全不同。
我不能简单地替换数据,因为序列的数量可能会改变,所以我必须删除所有序列并添加新的序列。
如何存档新系列的样式与替换的系列相似?(在我看来,新系列应该有浅蓝色、深蓝色和第三种颜色。)
测试用例
我创建了一些测试用例来澄清我所面临的问题。上图是它应该看起来的样子,下图是它实际看起来的样子。我希望他们是一样的!
- 删除两个系列并添加两个系列
- 删除两个系列并添加三个系列
- 删除三个系列并添加两个系列
解决方案需要处理所有这些情况!
我在GitHub上的一个pull请求中找到了解决方案(https://github.com/highslide-software/highcharts.com/pull/203)。
您只需要在删除系列后重置Highcharts颜色计数器。还有一个符号计数器。
更新:从4.0.3及以上版本开始,计数器名称已更改:
var chart = $('#container').highcharts();
while(chart.series.length) {
chart.series[0].remove();
}
chart.colorCounter = 0;
chart.symbolCounter = 0;
chart.addSeries({
data: [144.0, 176.0, 29.9, 71.5, 106.4, 129.2, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]
});
chart.addSeries({
data: [129.2, 106.4, 135.6, 95.6, 54.4, 148.5, 144.0, 176.0, 29.9, 71.5, 216.4, 194.1]
});
chart.addSeries({
data: [106.4, 129.2, 135.6, 148.5, 144.0, 176.0, 29.9, 71.5, 194.1, 95.6, 54.4, 216.4]
});
现场示例:http://jsfiddle.net/juuQs/18/
(在4.0.3版本之前,您必须使用chart.counters.color=0和chart.counters.symbol=0)
使用颜色选项:
$('#container').highcharts({
colors: ['#2f7ed8',
'#0d233a',
'#8bbc21'],
series: …
现场示例:http://jsfiddle.net/juuQs/3/
或者为每个系列使用静态颜色,如下所示:
chart.addSeries({
data: [144.0, 176.0, 29.9, 71.5, 106.4, 129.2, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4],
color: '#2f7ed8'
});
您可以使用我的自定义解决方案,在每次单击事件中重置颜色。
http://jsfiddle.net/sbochan/gJvde/1/
function setColors(chart){
var series = chart.series,
colors = chart.options.colors,
len = series.length-1;
if(flag) {
$.each(series,function(i,serie){
if(i==len) {
flag != flag;
serie.update({
color: colors[i]
},true,true);
}
else {
serie.update({
color: colors[i]
},false);
}
});
}
}
尝试使用addClass()方法。假设您的容器是id为Y的某个元素X。将样式信息放入头中,作为
<style>
X.Y { /* any style info */};
</style>
那么每次向任何元素添加数据时,都会对该元素调用addClass("Y")。
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 将样式表插入iframe
- 跟踪在页面加载时应用内联样式的JavaScript
- 如果文本字段为空,则使用JavaScript应用CSS样式
- 定义完全独立的样式信息
- W3C循环样式的JavaScript
- 动态更改高图中的系列颜色
- jQuery/JavaScript在线公文包表单-打印样式表
- 使用递归、Ramda.js和无点样式重构字符串的getPermutations()
- FF和Chromium中CSS样式按钮的外观差异
- 如何首先设置样式<td>表中包含在窗体中的元素
- javascript问题正文样式
- 使用具有内联样式的tidy-html5
- Highcharts colorsByPoint与系列中的线性渐变一起使用时不起作用
- chart.series[id].remove()无法刷新高位图表/高位股票中其他系列的图例属性
- DataTables-创建自定义分页样式(加载更多样式)
- 谷歌图表堆叠柱状图.如何设置每个单独堆叠项目(数据系列)的样式
- 设置内容样式包含字体系列、字体大小和颜色的可编辑列表 (
- )
- 是否有允许图例将每个系列设置为按钮样式的样式可供应用
- 如何重置Highcharts中系列的样式