Как расположить рамку оси внутри фигуры, не меняя размер фигуры? [Python, matplotlib] - PullRequest
0 голосов
/ 20 марта 2020

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

Вот как выглядит базовая фигура:

import matplotlib.pyplot as plt

fig=plt.figure(figsize=(8,4),facecolor=(0.5,0.5,0.5))
ax=fig.add_subplot()
ax.plot([5,10],[800,900])
plt.show()

enter image description here

Вот один из способов, как я пытаюсь изменить его, если я хочу, чтобы рамка оси начиналась слева = 0,5, снизу = 0,5, ширина = 0,2 и высота = 0,2. Я пробовал много разных способов, и все они потерпели неудачу, поэтому это пример того, что я пытаюсь сделать:

fig=plt.figure(figsize=(8,4),facecolor=(0.5,0.5,0.5))
ax=fig.add_axes((0.5,0.5,0.2,0.2))
ax.plot([5,10],[800,900])
plt.show()

enter image description here

Теперь я хочу, чтобы это выглядело примерно так, чтобы черный ящик рамки оси находился в одинаковом положении для каждой фигуры, а каждая фигура имела одинаковый размер. Таким образом, когда я сделаю это анимацией, черная рамка не будет дергаться. (Очевидно, я бы не стал делать такой большой буфер в реальном видео.)

enter image description here

1 Ответ

1 голос
/ 20 марта 2020

Вам необходимо использовать ax.set_position .

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

import matplotlib.pyplot as plt 

fig = plt.figure(figsize=(8, 4), facecolor=(0.5, 0.5, 0.5))
ax = fig.add_subplot(111)
bbox = ax.get_position()
new_bbox = (bbox.x0+0.40, bbox.y0+0.40, bbox.width*0.5, bbox.height*0.5)
ax.set_position(new_bbox)
ax.plot([5, 10], [800, 900])
plt.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...