Скрытие текста оси в графиках matplotlib
Я пытаюсь построить фигуру без меток или цифр на любой из осей (я использую оси в традиционном смысле, а не номенклатуру matplotlib!). Проблема, с которой я столкнулся, заключается в том, что matplotlib настраивает xl (y) ticklabels путем вычитания значения N, затем добавляет N в конце оси.
Это может быть неопределенным, но следующий упрощенный пример освещает проблему: "6.18" является нарушающим значением N:
import matplotlib.pyplot as plt
import random
prefix = 6.18
rx = [prefix+(0.001*random.random()) for i in arange(100)]
ry = [prefix+(0.001*random.random()) for i in arange(100)]
plt.plot(rx,ry,'ko')
frame1 = plt.gca()
for xlabel_i in frame1.axes.get_xticklabels():
xlabel_i.set_visible(False)
xlabel_i.set_fontsize(0.0)
for xlabel_i in frame1.axes.get_yticklabels():
xlabel_i.set_fontsize(0.0)
xlabel_i.set_visible(False)
for tick in frame1.axes.get_xticklines():
tick.set_visible(False)
for tick in frame1.axes.get_yticklines():
tick.set_visible(False)
plt.show()
Три вещи, которые я хотел бы знать, следующие:
-
Как отключить это поведение в первую очередь (хотя в большинстве случаев это полезно, это не всегда!) Я просмотрел matplotlib.axis.XAxis
и не могу найти что-либо подходящее
-
Как я могу удалить N (т.е. X.set_visible(False)
)
-
Есть ли лучший способ сделать это в любом случае? Мой последний сюжет будет 410 подзаголовков на фигуре, если это актуально.
Ответы
Ответ 1
Вместо того, чтобы скрывать каждый элемент, вы можете скрыть всю ось:
frame1.axes().get_xaxis().set_visible(False)
frame1.axes().get_yaxis().set_visible(False)
Или вы можете установить тики в пустой список:
frame1.axes().get_xaxis().set_ticks([])
frame1.axes().get_yaxis().set_ticks([])
В этом втором варианте вы можете использовать plt.xlabel()
и plt.ylabel()
для добавления меток к осям.
Ответ 2
Если вы хотите скрыть только текст оси, сохраняющий линии сетки:
frame1 = plt.gca()
frame1.axes.xaxis.set_ticklabels([])
frame1.axes.yaxis.set_ticklabels([])
Выполнение set_visible(False)
или set_ticks([])
также скроет линии сетки.
Ответ 3
В некотором роде старого потока, но, похоже, это более быстрый метод с использованием последней версии matplotlib:
установите основной форматтер для оси x
ax.xaxis.set_major_formatter(plt.NullFormatter())
Ответ 4
Если вы похожи на меня и не всегда извлекаете оси, ax
, при построении рисунка, то простым решением было бы сделать
plt.xticks([])
plt.yticks([])
Ответ 5
На самом деле я не мог отображать изображение без границ или осевых данных на основе любого из фрагментов кода (даже тот, который был принят в ответ). После обработки какой-либо документации по API я приземлился на этот код, чтобы отобразить изображение
plt.axis('off')
plt.tick_params(axis='both', left='off', top='off', right='off', bottom='off', labelleft='off', labeltop='off', labelright='off', labelbottom='off')
plt.savefig('foo.png', dpi=100, bbox_inches='tight', pad_inches=0.0)
Я использовал вызов tick_params, чтобы в основном отключить любую дополнительную информацию, которая может быть отображена, и у меня есть идеальный график в моем выходном файле:). Надеюсь, это поможет!