Matplotlib: - как показать все цифры на ТИКах? [дубликат]

Возможные Дубликаты:
Как удалить относительный сдвиг в оси matplotlib

Я строю числа с пятью цифрами (210.10, 210.25, 211.35 и т. д.) против дат, и я хотел бы, чтобы тики оси y показывали все цифры ('214.20', а не '0.20 + 2.14e2') и не смогли понять этого. Я попытался установить формат ticklabel на обычный, но, похоже, у него нет эффект.

plt.ticklabel_format (style='plain', axis='y')

любые намеки на очевидное, что мне не хватает?

2 ответов


вы также можете просто отключить смещение: (почти точная копия Как удалить относительный сдвиг в оси matplotlib)

import matlplotlib is plt

plt.plot([1000, 1001, 1002], [1, 2, 3])
plt.gca().get_xaxis().get_major_formatter().set_useOffset(False)
plt.draw()

это захватывает текущий axes, получает ось x axis объект, а затем основной объект форматирования и наборы useOffset значение false (doc).


номера осей определяются в соответствии с заданным Formatter. К сожалению (AFAIK), matplotlib не предоставляет способ управления порогом, чтобы перейти от чисел к меньшему числу + смещению. Подход грубой силы будет устанавливать все строки xtick:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(100, 100.1, 100)
y = np.arange(100)

fig = plt.figure()
plt.plot(x, y)
plt.show()  # original problem

enter image description here

# setting the xticks to have 3 decimal places
xx, locs = plt.xticks()
ll = ['%.3f' % a for a in xx]
plt.xticks(xx, ll)
plt.show()

enter image description here

это фактически то же самое, что установка FixedFormatter со строками:

from matplotlib.ticker import FixedFormatter
plt.gca().xaxis.set_major_formatter(FixedFormatter(ll))

однако проблема такой подход заключается в том, что метки фиксируются. Если вы хотите изменить размер/панорамировать сюжет, вам нужно начать все сначала. Более гибкий подход использует FuncFormatter:

def form3(x, pos):
    """ This function returns a string with 3 decimal places, given the input x"""
    return '%.3f' % x

from matplotlib.ticker import FuncFormatter
formatter = FuncFormatter(form3)
gca().xaxis.set_major_formatter(FuncFormatter(formatter))

и теперь вы можете перемещать график и по-прежнему поддерживать ту же точность. Но иногда это не подходит. Не всегда нужна фиксированная точность. Один хотел бы сохранить поведение форматирования по умолчанию, просто увеличить порог, когда он начинает добавлять смещение. Нет разоблачила механизм это, так что я в конечном итоге делаю, чтобы изменить исходный код. Это довольно просто, просто измените один символ в одной строке в ticker.py. Если вы посмотрите на эту версию github, она находится в строке 497:

if np.absolute(ave_oom - range_oom) >= 3:  # four sig-figs

Я обычно меняю его на:

if np.absolute(ave_oom - range_oom) >= 5:  # four sig-figs

и найти, что он отлично работает для моего использования. Измените этот файл в установке matplotlib, а затем не забудьте перезапустить python, прежде чем он вступит в силу.