Новый питонический стиль для общих осей квадратных подзаглавов в matplotlib? - программирование
Подтвердить что ты не робот

Новый питонический стиль для общих осей квадратных подзаглавов в matplotlib?

Связано с: печать автомасштабированных подзаговоров с фиксированными ограничениями в matplotlib

Я хотел бы сделать набор подзаголовков, которые все в одном масштабе, используя новый компактный стиль subplots, как в http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.subplots и пусть они будут квадратными.

Я пробовал:

fig, axes = subplots(numplots, 1, sharex=True, sharey=True, adjustable='box', aspect='equal')

Но я обнаружил, что эти аргументы ключевого слова не реализованы в обертке subplots. Каким образом это сделать?

Чтобы повторить, цель состоит в том, чтобы просто иметь общие оси, чтобы все данные находились в одном масштабе и имели квадраты.

4b9b3361

Ответ 1

Просто используйте adjustable='box-forced' вместо adjustable='box'.

Как упоминает @cronos, вы можете передать его с помощью subplot_kw kwarg (дополнительные аргументы ключевого слова для subplots передаются в Figure не Axes, поэтому необходимость в subplot_kw).

Вместо этого я собираюсь использовать setp, который в основном просто делает for item in sequence: item.set(**kwargs). (У всех художников matplotlib есть метод set, который можно использовать аналогично matlab set.)

Какой из них "лучший" подход будет зависеть от того, что вы делаете. Многие люди утверждают, что setp очень "неспокойный", но я не вижу проблемы с ним.

В качестве быстрого примера:

import matplotlib.pyplot as plt

fig, axes = plt.subplots(ncols=3, sharex=True, sharey=True)
plt.setp(axes.flat, aspect=1.0, adjustable='box-forced')

axes[0].plot(range(50))

plt.show()

enter image description here

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

Ответ 2

В документации, на которую вы ссылаетесь, предлагается subplot_kw

fig, axes = subplots(numplots, 1, sharex=True, sharey=True, subplot_kw=dict(adjustable='datalim', aspect='equal'))

Однако общие оси, по-видимому, требуют datalim как регулируемые, графики масштабируются правильно, но не квадратные. Если вы не разделяете общие оси, тогда работает "ящик". Ваш звонок.