2017-06-28 2 views
0

Ich benutze C3 Balkendiagramme jetzt habe ich ein Problem mit X-Achse Tick. Ich nehme Wert der X-Achse dynamisch.Diagramm X-Achsen-Tick in c3-Diagrammen

ein code:

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 
    } 
}); 

Sie die oben sehen kann ich verwendet habe "Chennai" dreimal in der X-Achse. Siehe unten für weitere

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

So Problem ist, wenn Diagramm plotten dann diese doppelten Wert nicht angezeigt wird, diese (Chennai) ist die Anzeige nur einmal und Ruhezeiten seiner die Zahlen zu drucken. Siehe beigefügte Grafik enter image description here

+1

nicht y reproduzieren unser Problem, siehe diese Geige: https://jsfiddle.net/Dimmy/q2spv1mc/1/ Besteht das Problem? –

+0

Ich habe gerade die c3.min.js aktualisiert und es funktioniert gut. Zuvor habe ich von //cdn.jsdelivr.net/c3/0.4.11/c3.min.js angerufen und jetzt habe ich das von https://cdnjs.cloudflare.com/ajax/libs/c3/0.4.10 heruntergeladen /c3.min.js. –

Antwort

0

Wie wir oben in den Kommentaren herausgefunden haben, beginnt c3.js, 0.4.11 gleiche Kategorien zu gruppieren.

Schnelle Abhilfe wird entweder vorherige Version verwenden, oder fügen Sie zusätzliche Leerzeichen Kategorienamen sie tatsächlich machen unterscheiden, aber bleiben optisch identisch:

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

Wenn Sie es dynamisch tun wollen, geeignetere Lösung kann sein Hinzufügen Index, zu wiederholen Kategorien:

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

+0

Ja das ist mir bekannt aber in meinem Fall kommen alle Kategorien dynamisch aus der Datenbank. Jetzt arbeitet es mit neuen c3.min.js. Gibt es einen Nachteil beim Hinzufügen? –

+0

Nachteil der Bindung an ältere Version ist, dass Sie zukünftige Bugfixes und andere potenziell nützliche Updates verpassen. Und wenn jemand (versehentlich oder absichtlich) ein Upgrade durchführt, wird die Funktionalität unterbrochen und ein solcher Fehler kann schwer zu finden und zu beheben sein. –

+0

Ich habe meine Antwort und Geige aktualisiert, um die Lösung dynamisch anwenden zu lassen. Ich denke, es wäre besser. –