ich viele Möglichkeiten versucht haben, richtig in Log-Plots kleinere Zecken zum Laufen zu bringen. Wenn es Ihnen gut geht, das Protokoll des Werts des Ticks anzuzeigen, können Sie matplotlib.ticker.LogFormatterExponent
verwenden. Ich erinnere mich daran, versucht matplotlib.ticker.LogFormatter
, aber ich mochte es nicht viel: wenn ich mich gut erinnere, setzt es alles in base^exp
(auch 0,1, 0, 1). In beiden Fällen (sowie in allen anderen matplotlib.ticker.LogFormatter*
) müssen Sie labelOnlyBase=False
setzen, um kleinere Ticks zu erhalten.
Ich endete beim Erstellen einer benutzerdefinierten Funktion und matplotlib.ticker.FuncFormatter
verwenden. Bei meinem Ansatz wird davon ausgegangen, dass die Ticks ganzzahlige Werte haben und dass Sie ein logisches Basis-10-Protokoll wünschen.
from matplotlib import ticker
import numpy as np
def ticks_format(value, index):
"""
get the value and returns the value as:
integer: [0,99]
1 digit float: [0.1, 0.99]
n*10^m: otherwise
To have all the number of the same size they are all returned as latex strings
"""
exp = np.floor(np.log10(value))
base = value/10**exp
if exp == 0 or exp == 1:
return '${0:d}$'.format(int(value))
if exp == -1:
return '${0:.1f}$'.format(value)
else:
return '${0:d}\\times10^{{{1:d}}}$'.format(int(base), int(exp))
subs = [1.0, 2.0, 3.0, 6.0] # ticks to show per decade
ax.xaxis.set_minor_locator(ticker.LogLocator(subs=subs)) #set the ticks position
ax.xaxis.set_major_formatter(ticker.NullFormatter()) # remove the major ticks
ax.xaxis.set_minor_formatter(ticker.FuncFormatter(ticks_format)) #add the custom ticks
#same for ax.yaxis
Wenn Sie nicht die großen Zecken entfernen und verwenden subs = [2.0, 3.0, 6.0]
die Schriftgröße der Dur- und Moll-Zecken unterscheidet (dies könnte Ursache sein, indem Sie text.usetex:False
in meinem matplotlibrc
)
nie meinen Verstand enge Abstimmung, falsch gelesen die Frage. Wenn Sie in Ihrem Diagramm keine größeren Log-Ticks haben, sollten Sie wahrscheinlich keinen Log-Maßstab verwenden. – tacaswell
@tcaswell das ist nicht wahr: Wenn Sie eine Funktion haben, die in der Nähe von Potenzgesetz ist (möglicherweise mit einem kleinen Feature), möchten Sie eine Log-Skala auch mit kleinen Bereichen verwenden. Dann sind in einem logarithmischen Plot große Ticks in der Potenz von 10, so dass Sie eine Range [2000, 9000] und keine größeren Ticks haben können. –
Das dachte ich mir. Ich kann Tausende von Punkten haben, die alle konzentriert sind (mit sehr geringer Streuung) um einen Wert, der nicht nahe einer Potenz von 10 ist und trotzdem eine logarithmische Skala auf die X-Achse anwenden möchte. –