Matplotlib корректирует запас показателя
Следующий код дает мне график со значительными полями выше и ниже цифры. Я не знаю, как устранить заметные поля. subplots_adjust
работает не так, как ожидалось.
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(range(10),range(10))
ax.set_aspect('equal')
plt.tight_layout()
tight_layout
устраняет часть поля, но не все поля.
Я хотел бы на самом деле установить соотношение сторон к любому настроенному значению и одновременно исключить пробел.
Обновить: как говорит Пьер Х., ключ заключается в изменении размера контейнера фигур. Поэтому мой вопрос: не могли бы вы предложить способ приспособить размер фигуры к размеру осей с произвольным соотношением сторон?
Другими словами, сначала я создаю фигуру и оси на ней, а затем меняю размер осей (например, изменяя соотношение сторон), что, в общем, оставит часть контейнера фигур пустым. На этом этапе нам необходимо изменить размер фигуры, чтобы исключить пустое пространство на фигурном контейнере.
Ответы
Ответ 1
Я только что узнал, как устранить все поля из моих цифр. Я не использовал tight_layout()
, вместо этого использовал:
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(20,20))
ax = plt.subplot(111,aspect = 'equal')
plt.subplots_adjust(left=0, bottom=0, right=1, top=1, wspace=0, hspace=0)
Надеюсь, что это поможет.
Ответ 2
После построения графика вы можете легко манипулировать полями следующим образом:
plot_margin = 0.25
x0, x1, y0, y1 = plt.axis()
plt.axis((x0 - plot_margin,
x1 + plot_margin,
y0 - plot_margin,
y1 + plot_margin))
Этот пример можно изменить на нужный формат или изменить поля, как вы действительно хотите.
В других сообщениях stacktoverflow многие вопросы, связанные с полями, могут использовать этот более простой подход.
С уважением.
Ответ 3
tight_layout(pad=0)
удовлетворит ваши потребности.
http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.tight_layout
Ответ 4
Я думаю, что вызов subplot_adjust
здесь не имеет значения, поскольку настройка переопределяется tight_layout
. Во всяком случае, это только меняет размер осей внутри фигуры.
Как указал tcaswell, вам нужно изменить размер фигуры. Либо при создании (мое предложение ниже), либо после, используя fig.set_size_inches
. Я создаю фигуру с соотношением сторон 1:1, используя аргумент figsize=(6,6)
(конечно, 6 дюймов - произвольный выбор):
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure(figsize=(6,6))
ax = fig.add_subplot(111)
ax.plot(range(10),range(10))
ax.set_aspect('equal')
plt.tight_layout()
Ответ 5
Вы должны использовать add_axes
, если вы хотите точно контролировать макет фигуры. например.
left = 0.05
bottom = 0.05
width = 0.9
height = 0.9
ax = fig.add_axes([left, bottom, width, height])
Ответ 6
Я думаю, что вам нужно, и это хорошо работает для меня.
plt.axis('tight')
Эта команда автоматически масштабирует ось, чтобы плотно прилегать к данным. Также проверьте ответ Nuno Aniceto на индивидуальную ось. Документы находятся в https://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.axis.
Помните, что
plt.savefig(filename, bbox_inches='tight')
поможет удалить пробел всей фигуры, включая метки и т.д., но не пробел внутри осей.