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 многие вопросы, связанные с полями, могут использовать этот более простой подход.

С уважением.

Ответ 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')

поможет удалить пробел всей фигуры, включая метки и т.д., но не пробел внутри осей.