Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript C3.js-堆叠条形图-我可以让值包含而不是彼此堆叠吗?_Javascript_C3.js - Fatal编程技术网

Javascript C3.js-堆叠条形图-我可以让值包含而不是彼此堆叠吗?

Javascript C3.js-堆叠条形图-我可以让值包含而不是彼此堆叠吗?,javascript,c3.js,Javascript,C3.js,我正在使用C3.js库创建一个堆叠条形图(我当前的代码在底部的JSFIDLE中)。问题是默认情况下,列是。。。堆积如山。因为我需要创建具有最小值、平均值和最大值的列,所以我希望这些值彼此包含,而不是堆栈。例如,如果我的最小值为10,平均值为50,最大值为100,我希望杆的高度为100,而不是160。是否有任何内在的方式来支持这种行为 我当前的代码: <div id="chart"></div> <script> var chart = c3.gene

我正在使用C3.js库创建一个堆叠条形图(我当前的代码在底部的JSFIDLE中)。问题是默认情况下,列是。。。堆积如山。因为我需要创建具有最小值、平均值和最大值的列,所以我希望这些值彼此包含,而不是堆栈。例如,如果我的最小值为10,平均值为50,最大值为100,我希望杆的高度为100,而不是160。是否有任何内在的方式来支持这种行为

我当前的代码:

<div id="chart"></div>

<script>
    var chart = c3.generate({
        bindTo: '#chart',
        data: {
            columns: [
                ['min', 10, 25, 15],
                ['avg', 50, 33, 51],
                ['max', 100, 75, 200]
            ],
            type: 'bar',
            groups: [
                ['min', 'avg', 'max']
            ]
        }
    });
</script>

var图表=c3.0({
bindTo:'图表',
数据:{
栏目:[
[min',10,25,15],
[avg',50,33,51],
['max',100,75,200]
],
类型:'bar',
小组:[
[‘最小’、‘平均’、‘最大’]
]
}
});
下面是一个包含我的代码的JSFIDLE:

我不知道有什么内置的东西会像你所描述的那样使这些条相互合并,但是一个并排的视图会有帮助吗?如果是,请删除分组


我不知道有什么内置的东西会像你描述的那样使这些条相互合并,但是一个并排的视图会有帮助吗?如果是,请删除分组


我不认为c3有一个“过量”的酒吧选项,但你可以按摩你的数据

基本上预先处理数据,所以max实际上是max-avg,avg实际上是avg-min

然后,工具提示例程将恢复正确的总数以显示给用户

如果您将数据传递到其他任何东西上,并且记住数据已被更改并将其还原(或保留副本),请务必小心

var数据=[
[min',10,25,15],
[avg',50,33,51],
['max',100,75,200]
];
对于(var n=data.length-1;n>0;n--){
对于(var m=1;m
我认为c3没有“过多”条选项,但你可以按摩你的数据

基本上预先处理数据,所以max实际上是max-avg,avg实际上是avg-min

然后,工具提示例程将恢复正确的总数以显示给用户

如果您将数据传递到其他任何东西上,并且记住数据已被更改并将其还原(或保留副本),请务必小心

var数据=[
[min',10,25,15],
[avg',50,33,51],
['max',100,75,200]
];
对于(var n=data.length-1;n>0;n--){
对于(var m=1;m
好的,我将此作为另一个答案添加,因为它完全不同,而且如果我更改了原始答案,评论将毫无意义

这一次我利用了错误。。。c3中发现的导致其他用户无意中获得您想要的效果的功能(bug?)

基本上,如果您以json的形式提供数据,那么如果您将每个数据作为一个单独的点提供,则可以获得您想要的效果 e、 g.这样做会在同一柱上过度堆放最小值和最大值,即使它们是要堆放的

        [{ "x-axis": "0",
            "min": 30
        },
        { "x-axis": "0",
            "max": 40
        }],
然而,这种方式将它们堆叠起来:

        [{ "x-axis": "0",
            "min": 30,
            "max": 40
        }],
因此,我们需要的是一个例程,将原始的基于列的数据转换为json对象,其中每个数据都单独打包:

var数据=[
[min',10,25,15,12],
[avg',50,33,51,24],
['max',100,75,200,76]
];
var json=[];
data.forEach(函数(基准){
var系列=基准[0];
对于(变量i=1;i        [{ "x-axis": "0",
            "min": 30
        },
        { "x-axis": "0",
            "max": 40
        }],
        [{ "x-axis": "0",
            "min": 30,
            "max": 40
        }],
var data = [
                ['min', 10, 25, 15, 12],
                ['avg', 50, 33, 51, 24],
                ['max', 100, 75, 200, 76]
            ];

var json = [];
data.forEach (function (datum) {
    var series = datum[0];
    for (var i = 1; i < datum.length; i++) {
    var jdatum = {"x-axis": i-1};
    jdatum[series] = datum[i];
    json.push (jdatum);
  }
});

var chart = c3.generate({
    data: {
        x: "x-axis",
        json:json,
        keys: {
           x: "x-axis",
           value: ["max", "avg", "min"]
        },
        groups: [
           ['max', 'avg', 'min']
        ],
        type: 'bar',
    },
     bar: {
        width: {
            ratio: 0.95
        }
     },
     axis: {
       x: {
         padding: {
           left: 0.5,
           right: 0.5,
         }
       }
     },
     tooltip: {
         grouped: true,
         contents: function (d, defaultTitleFormat, defaultValueFormat, color) {
             var data = this.api.data.shown().map (function(series) {
                var matchArr = series.values.filter (function (datum) {
                    return datum.value != undefined && datum.x === d[0].x;
                });
                matchArr[0].name = series.id;
                return matchArr[0];
             });

            return this.getTooltipContent(data, defaultTitleFormat, defaultValueFormat, color);
      }
     }
    });