création d'un tracé d'axes carrés avec des échelles log2 dans matplotlib
Je voudrais faire un carré à l'axe du nuage de points avec matplotlib. Normalement à l'aide de set_scale("log")
fonctionne très bien, mais il me limite à log10. Je voudrais faire la parcelle en log2. J'ai vu la solution ici: Comment produire de façon exponentielle à l'échelle de l'axe?
mais c'est assez compliqué et ne fonctionne pas si vous avez 0 de valeurs dans vos tableaux, dont je ne. Je voudrais simplement ignorer ceux qui, comme les autres fonctions de numpy faire.
Par exemple:
log2scatter(data1, data2)
où data1 et data2 contenir 0s doit avoir une échelle logarithmique sur l'axe x et y, avec logarithmique espacés les tiques. Tout comme log10, à l'exception de log2...
Grâce.
source d'informationauteur user248237dfsf
Vous devez vous connecter pour publier un commentaire.
Il suffit de spécifier
basex=2
oubasey=2
.Pour le passage à zéro de comportement, ce que vous avez fait allusion à une "Symétrique du Journal" l'intrigue (un.k.un. "symlog"). Pour ce qu'il vaut, les données ne sont pas filtrés, c'est juste un récit linéaire proche de 0 et de l'historique de la parcelle partout ailleurs. C'est l'échelle qui change, pas les données.
Normalement vous devriez juste faire
ax.set_xscale('symlog', basex=2)
mais en utilisant un non-10 base semble être buggé pour le moment pour symlog parcelles.Modifier:
Heh! Le bug semble être due à une erreur classique: à l'aide d'une mutable argument par défaut.
J'ai déposé un rapport de bug, mais si vous avez envie de le fixer, vous aurez besoin de faire une modification mineure à
lib/matplotlib/ticker.py
, autour de la ligne de 1376, dans le__init__
méthode deSymmetricalLogLocator
.Au lieu de
De le changer pour quelque chose de similaire à:
Avec ce changement, il se comporte comme prévu...
Si vous utilisez
plt.xscale
vous avez encore besoin de spécifierbasex
pasbase
: