C3: Diagramme logarithmique

Créé le 20 mai 2014  ·  16Commentaires  ·  Source: c3js/c3

Bonjour à tous,
J'ai cherché un peu ici et sur la page des exemples, mais je n'ai rien trouvé sur les axes à échelle logarithmique. Est-il possible de les créer ? Sinon, considérez cela comme une demande de fonctionnalité.
Meilleures salutations,
Yakov.

C-feature-request C-new-chart

Commentaire le plus utile

c'est un hack assez moche. serait-il possible d'exposer une API permettant de brancher n'importe quelle balance d3 ?

Tous les 16 commentaires

Salut, Désolé actuellement pas. Vous devez maintenant générer vous-même les données à l'échelle logarithmique et tracer.
Je considérerai comme une nouvelle fonctionnalité plus tard.

Bonjour Masayuki,

vous devez générer les données à l'échelle logarithmique

voulez-vous dire qu'il est possible d'émuler cette fonctionnalité maintenant ? J'ai parcouru les exemples #Axis, mais je n'ai pas remarqué de moyen de placer les coches dans des positions arbitraires. Quel exemple devrais-je examiner ?
Meilleures salutations et merci pour votre temps et votre travail,
Yakov.

Lorsque vous préparez vos données, convertissez-les en échelle logarithmique. En Python, disons que vous avez une liste comme celle-ci

[100,1000,10000]

Tu fais juste ça

import math
log_list = map(math.log10,[100,1000,10000])

Une implémentation de la solution de contournement de Masayuki :

data_test_original = ['data1', 10, 100, 1000, 3, 500, 50, 5, 3000]
data_test = ['data1'];
for(var i=1; i<data_test_original.length; i++){
    data_test[i] = Math.log(data_test_original[i]) / Math.LN10;
}

var chart_test = c3.generate({
    bindto: '#chart_test',
    size: {
        height: 240,
        width: 480
    },
    data: {
      columns: [
        data_test
      ]
    },
    axis : {
        y : {
            tick: {
               format: function (d) { return Math.pow(10,d).toFixed(2); }
            }
        }
    },
});

hai @pbustosl ,, c'est du travail pour moi ! thx... mais quand j'ai la valeur 0 dans data1, ça ne marche pas, comment puis-je gérer la valeur 0 ? Merci

ce qui suit formatera également les valeurs :

data_test_original = ['data1', 10, 100, 1000, 3, 500, 50, 5, 3000]
data_test = ['data1'];
for(var i=1; i<data_test_original.length; i++){
    data_test[i] = Math.log(data_test_original[i]) / Math.LN10;
}

var chart_test = c3.generate({
    size: {
        height: 240,
        width: 480
    },
    data: {
        type:"bar",
      columns: [
        data_test
      ],
      labels : {show:true,
          format: {
              data1 : function(d,id){console.log(id, Math.pow(10,d));return Math.pow(10,d).toFixed(0);}
          }
      }
    },
    axis : {
        y : {
            show:false,
            tick: {
               format: function (d) { return Math.pow(10,d).toFixed(0); }
            }
        }
    },
});

c'est un hack assez moche. serait-il possible d'exposer une API permettant de brancher n'importe quelle balance d3 ?

+1 ... J'ai besoin de dessiner un graphique à l'échelle logarithmique.

J'aimerais également avoir la possibilité de définir mon ou mes axes y par log

J'aimerais moi aussi pouvoir utiliser une échelle logarithmique pour l'axe des y.

des nouvelles à ce sujet?

J'ai essayé de résoudre ce problème (#2100). Ce n'est pas parfait à 100% mais cela peut être suffisant pour beaucoup de cas.

J'ai essayé la solution de contournement @pbustosl ... c'était utile.

mais lorsque la valeur des données est 1, l'axe des y commençait à partir de 1 . également lorsque la valeur des données était 0, le graphique n'était pas rendu.

j'ai fait une solution de contournement pour cela.
veuillez vous référer à ce JSFiddle https://jsfiddle.net/86chryat/

d3.js prend directement en charge l'échelle de log sur un axe, donc ce serait vraiment bien si cela pouvait être mis en évidence dans c3. C'est une solution bien plus intéressante que de recalculer les données, car elle gère également les ticks.

Je suis d'accord qu'une échelle logarithmique serait utile

@ masayuki0812 - en fermant ceci, cela signifie-t-il que vous n'envisagerez pas de le prendre en charge ? C'est vraiment une fonctionnalité critique pour certaines applications. Ce serait formidable d'avoir une bonne intégration si vous avez le temps / l'envie s'il vous plaît.

Cette page vous a été utile?
0 / 5 - 0 notes