为highcharts中的每一列设置不同的颜色

Posted

技术标签:

【中文标题】为highcharts中的每一列设置不同的颜色【英文标题】:set different colors for each column in highcharts 【发布时间】:2011-12-05 22:46:34 【问题描述】:

我需要为 Highcharts 图表中的每一列动态设置不同的颜色。我的 Highcharts 图表是:

options = 
         chart: 
             renderTo: 'chart',
             type: 'column',
             width: 450
         ,
         title: 
             text: 'A glance overview at your contest’s status'
         ,
         xAxis: 
             categories: ['Approved Photos', 'Pending Approval Photos', 
                          'Votes', 'Entrants'],
             labels: 
                 //rotation: -45,
                 style: 
                     font: 'normal 9px Verdana, sans-serif, arial'
                 
             
         ,
         yAxis: 
             allowDecimals: false,
             min: 0,
             title: 
                 text: 'Amount'
             
         ,
         legend: 
             enabled: false
         ,
         series: []
     ;
     series = 
         name: "Amount",
         data: [],
         dataLabels: 
             enabled: true,
             color: '#000000',
             align: 'right',
             x: -10,
             y: 20,
             formatter: function () 
                 return this.y;
             ,
             style: 
                 font: 'normal 13px Verdana, sans-serif'
             
     
 ;

数据是这样设置的:

for (var i in Data) 
  if (parseInt(Data[i]) != 0) 
    series.data.push(parseInt(Data[i]));
   else 
    series.data.push(null);
  

options.series.push(series);
chart = new Highcharts.Chart(options);

如何为这个循环中的每个数据点动态设置不同的颜色?

【问题讨论】:

【参考方案1】:

这是最新版本的 Highcharts(当前为 3.0)的另一个解决方案。

将colorByPoint 选项设置为true 并定义您想要的color sequence。

options = 
    chart: ...,
    plotOptions: 
        column: 
            colorByPoint: true
        
    ,
    colors: [
        '#ff0000',
        '#00ff00',
        '#0000ff'
    ]

这是一个基于 Highcharts Column with rotated labels demo 的example

【讨论】:

请注意,此解决方案适用于条形图和柱形图。只需将 plotOptions 数组中的 'column' 更改为 'bar' 正是我需要的,并且比公认的答案更容易实现。谢谢! 有什么方法可以为多个系列做这样的事情吗?不是全球的?我有一个折线图和列,但我希望我的线条颜色不同于我为列系列设置的颜色。在柱形图中,某些列也需要有不同的颜色。【参考方案2】:

当您将值添加到 series.data 时,您还可以使用点选项设置颜色,例如

series.data.push( y: parseInt(Data[i]), color: '#FF0000' );

有关积分选项的更多详细信息,请参阅https://api.highcharts.com/class-reference/Highcharts.Point#color

【讨论】:

嗨!又是我...我如何按数据设置列宽。例如:如果数据是 23,我想设置列宽 100px,如果数据是 123,它将是 110px。我需要这个选项来将数据放在列的中间。 抱歉,我不确定你在 highcharts 中是如何做到这一点的。 你可以通过plotOptions->series->linewidth来设置宽度。但是,这将固定图表中所有条形的宽度。可能您可以使用最大值设置它。 highcharts.com/ref/#plotOptions-series--lineWidth 该文档链接已损坏 感谢您的回答!【参考方案3】:

尝试以下任一方法:

方法一:

Highcharts.setOptions( colors: ['#3B97B2', '#67BC42', '#FF56DE', '#E6D605', '#BC36FE'] );

方法二:

var colors = ['#3B97B2', '#67BC42', '#FF56DE', '#E6D605', '#BC36FE', '#000'];

 $('#bar_chart').highcharts(
        chart: 
            type: 'column'              
        ,
        title: 
            text: ''
        ,
        subtitle: 
            text: ''
        ,
        xAxis: 
            type: 'category'
        ,
        yAxis: 
            title: 
                text: ''
            
        ,
        legend: 
            enabled: false
        ,
        plotOptions: 
            series: 
                borderWidth: 0,
                dataLabels: 
                    enabled: false                       
                
            
        ,         

        series: [
            name: '',
            colorByPoint: true,
            data: [
                name: 'Blue',
                y: 5.78,
                color: colors[0]

            , 
                name: 'Green',
                y: 5.19,
                color: colors[1]

            , 
                name: 'Pink',
                y: 32.11,
                color: colors[2]

            , 
                name: 'Yellow',
                y: 10.04,
                color: colors[3]

            , 
                name: 'Purple',
                y: 19.33,
                color: colors[4]

            ]
        ]
    );

【讨论】:

有没有办法将颜色设置为不同颜色的数组?例如,我要从数据中返回我想要的颜色,所以我想使用它而不是手动设置它,并且某些列具有某些颜色。【参考方案4】:

我有来自 API 响应和 2 系列的颜色。第二个系列的动态色彩。

以下是在系列映射时设置动态颜色的示例。

const response = [
    'id': 1,
    'name': 'Mango',
    'color': '#83d8b6',
    'stock': 12.0,
    'demand': 28,
  ,
  
    id ': 2,
    'name': 'Banana',
    'color': '#d7e900',
    'stock': 12.0,
    'demand': 28,
  
];
let chartData: 
  categories: [],
  series: []
;
chartData.categories = response.map(x => x.name);
chartData.series.push(
  name: 'Series 1',
  type: 'column',
  data: response.map(x => x.demand)
);
chartData.series.push(
  name: 'Series 2',
  type: 'column',
  data: response.map(x => (
    y: x.stock,
    color: x.color // set color here dynamically
  ))
);
console.log('chartData: ', chartData);

您还可以阅读有关Highcharts series Point and Marker的更多信息

【讨论】:

以上是关于为highcharts中的每一列设置不同的颜色的主要内容,如果未能解决你的问题,请参考以下文章

请问如何获得GridView选中行的每一列的信息?

将矩阵的每一列写入R中的不同文本文件

为每一天设置不同的颜色(小部件)

如何将标题添加到 Collectionview 中的每一列

为熊猫中的每一列获取非零值

Highcharts动态突出显示一列