Matplotlib: показывать ярлыки для мелких клещей также

В matplotlib , когда я использую шкалу log на одной оси, может случиться, что эта ось не будет иметь никаких основных тиков , только незначительных . Таким образом, это означает, что для всей оси не отображаются метки .

Как я могу указать, что мне нужны метки и для небольших тиков?

Я пытался:

 plt.setp(ax.get_xticklabels(minor=True), visible=True) 

… но это не помогло.

    Я пробовал много способов, чтобы мелкие клещи работали правильно на логарифмических графиках. Если вам хорошо, показывая журнал значения галочки, вы можете использовать matplotlib.ticker.LogFormatterExponent . Я помню, как пытался использовать matplotlib.ticker.LogFormatter но мне это не понравилось: если я хорошо помню, он помещает все в base^exp (также 0,1, 0, 1). В обоих случаях (как и весь другой matplotlib.ticker.LogFormatter* ) вам нужно установить labelOnlyBase=False чтобы получить незначительные тики.

    Я закончил создание пользовательской функции и использовал matplotlib.ticker.FuncFormatter . Мой подход предполагает, что тики имеют целочисленные значения и что вы хотите использовать базу 10 log.

     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 

    Если вы не удаляете основные тики и используете subs = [2.0, 3.0, 6.0] размер шрифта основных и второстепенных тиков отличается (это может быть причиной с помощью text.usetex:False в моем matplotlibrc )

    Вы можете использовать set_minor_tickformatter на соответствующей оси:

     from matplotlib import pyplot as plt from matplotlib.ticker import FormatStrFormatter axes = plt.subplot(111) axes.loglog([3,4,7], [2,3,4]) axes.xaxis.set_minor_formatter(FormatStrFormatter("%.2f")) plt.xlim(1.8, 9.2) plt.show() 

    введите описание изображения здесь