代码之家  ›  专栏  ›  技术社区  ›  Raghbendra Nayak

c3图表中的图表X轴刻度

  •  0
  • Raghbendra Nayak  · 技术社区  · 7 年前

    我正在使用C3条形图,现在我面临X轴刻度的问题。我动态地取X轴的值。

    chart = c3.generate({
        bindto: '#port_range_to_port_range',
        data: {
            x: 'x',
            columns: [
                ['x','Ho Chi Minh City', 'Tanjung Priok (Jakarta)', 'Chennai', 'Chennai', 'Chennai'],
                ['Your lowest rate', 530, 800, 900, 525, 190],
                ['Benchmark rate', 241, 890,  254, 100, 149],
                ['Lowest rate on route',200, 859, 256, 365, 410],
            ],
            type: 'bar'
        },
        axis: {
            x: {
                type: 'category' // this needed to load string x value
            },
            y: {
                tick: {
                    format: d3.format("$,")
                }
            }
        },
        legend: {
            show: false
        }
    });
    

    你可以看到上面我在X轴上用了三次“金奈”。详见下文

     columns: [
                ['x','Ho Chi Minh City', 'Tanjung Priok (Jakarta)', 'Chennai', 'Chennai', 'Chennai'],
    

    所以问题是,当图形绘制时,这些重复值不显示,这(金奈)只显示一次,其余时间打印数字。见附图 enter image description here

    1 回复  |  直到 7 年前
        1
  •  1
  •   Dmitry Demidovsky John H    7 年前

    正如我们在上面的评论中所指出的,自从 0.4.11 c3.js开始将相同的类别归为一类。

    快速解决方法是使用以前的版本,或在类别名称中添加额外的空格,使它们实际上不同,但视觉上保持一致:

    columns: [['x',
        'Ho Chi Minh City',
        'Tanjung Priok (Jakarta)',
        'Chennai',
        'Chennai ', // <-- here
        'Chennai  ' // <-- and here
    ], 
    

    如果您想动态执行,则更合适的解决方案可能是 重复类别:

    columns: [['x', ... some dynamic data ]
        .map(function(category, i, arr){ 
          var prev = arr.slice(0, i); 
          var count = prev.reduce(function(sum, item) { 
            if (item === category) return sum + 1;
            else return sum;
          }, 0); 
    
          if (count != 0) return category + '-' + count;
          else return category;
        })
    ]
    
    // will give you 
    // [['x', 'Ho Chi Minh City', 'Tanjung Priok (Jakarta)', 
    // 'Chennai', 'Chennai-1', 'Chennai-2']]
    

    See updated fiddle