Charts.js - 带有两个单词轴

时间:2016-12-17 15:27:11

标签: javascript charts bubble-chart chart.js

我需要创建一个气泡图样式图表,它有两个轴,都是单词而不是文本。

在我想要的例子中:

  • 轴x是颜色,例如红色,蓝色,黄色
  • 轴y是汽车,例如小型车,中型车,大型车

从这里我想绘制每辆汽车的订购数量,例如:如果订购了2辆小型红色轿车,并且订购了一辆大型蓝色轿车,那么小红色上会出现一个气泡,大小是泡泡大蓝的两倍。

我已经完成了chart.js的一些工作,但我的例子都没有涵盖如何使用文本而不是数字。

任何帮助都会非常感激,我已经查看了这里的文档.. enter link description here,但是还没有得到任何工作。

提前致谢。

1 个答案:

答案 0 :(得分:2)

我最近对数据集有相同的要求,并在scale选项中为每个轴使用了回调函数。我将标签的值列表填充到一个数组中,然后使用该点的索引执行查找以重命名刻度标签。

var colours = ["Red", "Blue", "Green", "Yellow"];
var carSizes = ["Small", "Medium", "Large"];

// Small Red = 10
// Small Green = 14
// Medium Yellow = 23
var dataPoints = [{x: 0, y: 0, r: 10}, {x: 2, y: 0, r: 14}, {x: 3, y: 1, r: 23}

var myBubbleChart = new Chart(bubbleCtx, {
            type: 'bubble',
            data: dataPoints,
            options: {
                title: {
                    display: true,
                    text: "Car Orders"
                },
                scales: {
                    yAxes: [{
                        ticks: {
                            stepSize: 1,
                            callback: function (value, index, values) {
                                if (index < carSizes.length) {
                                    return carSizes[carSizes.length - (1 + index)]; //this is to reverse the ordering
                                }
                            }
                        },
                        position: 'left'
                    }],
                    xAxes: [{
                        ticks: {
                            stepSize: 1,
                            callback: function (value, index, values) {
                                if (index < colours.length) {
                                    return colours[index];
                                }
                            }
                        },
                        position: 'bottom'
                    }]
                }
            }
        });

经过多次反复试验后,我发现有必要将步长设置为1,否则图表会因网格线外出现的数据而出现偏差。

如果您没有动态设置数据并知道每个轴的最小值和最大值,则可以设置刻度线的最小和最大属性,并将轴类型指定为“类别”。

yAxes: [{
    type: 'category',
    ticks: {
        stepSize: 1,
        min: 'Small',
        max: 'Large'
    },
    position: 'left'
}]