D3 marques de tique sur les entiers seulement

j'ai un diagramme à barres d3 dont les valeurs vont de 0-3. Je voudrais que l'axe des y ne montre que des valeurs entières, ce que je peux faire par

var yAxis = d3.svg.axis().scale(y).orient("right").tickFormat(d3.format("d"));

cependant, il y a encore des marques de tique sur les marques non-entières. Le fait de définir le format de la tique ne cache que ces étiquettes. Je peux définir explicitement le nombre de tiques ou les valeurs des tiques, mais ce que je voudrais faire est de juste être en mesure de spécifier que les marques de tiques apparaissent seulement à des valeurs entières. Est-ce possible?

enter image description here

20
demandé sur Infinite Recursion 2012-11-27 07:22:41

4 réponses

Vous pouvez ajouter .les tiques(4) et .tickSubdivide(0) comme je l'ai fait ci-dessous:

var yAxis = d3.svg.axis()
    .scale(y)
    .orient("right")
    .ticks(4)
.tickFormat(d3.format("d"))
    .tickSubdivide(0);
16
répondu Boom Shakalaka 2012-11-28 02:30:59

vous pouvez programmatiquement définir le nombre de tiques à data.length - 1 (ce qui résout le problème que vous aviez pour le petit nombre de tiques ainsi)

var yAxis = d3.svg.axis()
    .scale(y)
    .orient("right")
    .tickFormat(d3.format("d"))
    .ticks(data.length - 1)
6
répondu cssndrx 2013-08-05 16:44:43

utilisé cette astuce pour faire ce travail sur les graphiques dynamiques (1 ou plus graphiques sur la page)

ça a fait l'affaire. J'ai changé pour être Mathématique.min (maxHeight+1, yAxis.ticks ()) donc si la hauteur du graphe est inférieure que le nombre de tiques, il réduit le nombre de tiques. – Jeff Storey Nov 28 ' 12 à 2: 47

  // It is either 10 or Maximum Chart height + 1 

        var graphValues = selection.data()[0].map(function(obj) {
            return obj['count'];
        }).compact();  

        Array.prototype.maxValArray = function() {
          return Math.max.apply(null, this);
        };

        var maxValue = graphValues.maxValArray();

        yAxis.ticks(Math.min(maxValue + 1, 10)) 
1
répondu kristjan reinhold 2015-05-22 08:07:50
.xAxis().ticks(4)
.tickFormat(d3.format("d"));

supprimer les étiquettes, mais pas les tiques.

donc je propose d'appliquer un seuil sur ticks(). Si elle est inférieure à 4, elle est fixée à la limite elle-même (0,1,2,3). Est fait avec:

.on("preRedraw", function(chart) {
    var maxTick = chart.group().top(1)[0].value;
    if (maxTick < 4) {
      chart.xAxis().ticks(maxTick);
    } else {
      chart.xAxis().ticks(4);
    }

});

https://jsfiddle.net/PBrockmann/k7qnw3oj/

faites-moi savoir s'il y a une solution plus simple. Ce qui concerne

0
répondu PBrockmann 2018-03-05 08:25:58