#python #matplotlib
#python #matplotlib
Вопрос:
Я рисую круг:
import matplotlib.pyplot as plt
from mpl_toolkits.axisartist.axislines import SubplotZero
fig = plt.figure(1, figsize=(6, 6))
ax = SubplotZero(fig, 111)
fig.add_subplot(ax)
centreCircle = plt.Circle((0, 0), 1, color="black", fill=False, lw=2)
# Draw the circles to our plot
ax.add_patch(centreCircle)
plt.axis('equal')
plt.show()
Все в порядке:
Но когда я хочу увеличить пределы осей:
ax.set_ylim(-5, 5)
ax.set_xlim(-5, 5)
Я потерпел неудачу.
Как я могу этого добиться?
Ответ №1:
Возможно, я не понимаю проблему в полноте, потому что простое добавление ax.set_ylim(-5, 5); ax.set_xlim(-5, 5)
к вашему коду на самом деле создает хороший график.
Но в целом вы можете использовать ax.set_aspect("equal", adjustable="box")
, чтобы настроить оси в соответствии с вашими ограничениями при использовании равного аспекта. Таким образом, для асимметричных пределов это может выглядеть следующим образом
import matplotlib.pyplot as plt
from mpl_toolkits.axisartist.axislines import SubplotZero
fig = plt.figure(1, figsize=(6, 6))
ax = SubplotZero(fig, 111)
fig.add_subplot(ax)
centreCircle = plt.Circle((0, 0), 1, color="black", fill=False, lw=2)
# Draw the circles to our plot
ax.add_patch(centreCircle)
ax.set_aspect("equal", adjustable="box")
ax.set_ylim(-5, 5)
ax.set_xlim(-5, 10)
plt.show()
Комментарии:
1.
ax.set_aspect("equal", adjustable="box")
решена проблема
Ответ №2:
Вы можете просто выполнить то, что вам нужно, без AxisArtist. Если вы можете обойтись без этого, то вот следующий пример кода:
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Circle
fig, ax = plt.subplots(1,1, figsize=(7,7))
ax.add_artist(Circle((0,0),1,color='b'))
ax.set_xlim((-5,5))
ax.set_ylim((-5,5))
plt.show()
РЕДАКТИРОВАТЬ: повторить с помощью AxisArtist
import matplotlib.pyplot as plt
import mpl_toolkits.axisartist as AA
%matplotlib "notebook"
fig = plt.figure(1, figsize=(5,5))
ax = AA.Subplot(fig, 1, 1, 1)
fig.add_subplot(ax)
centreCircle = plt.Circle((0, 0), 1, color="black", fill=False, lw=2)
ax.add_patch(centreCircle)
ax.set_ylim(-5, 5)
ax.set_xlim(-5, 5)
plt.show()
plt.savefig('circle5x5v2.png')
Комментарии:
1. На самом деле, мне это нужно, потому что с помощью AxisArtist я добавляю декартовы оси к графику.
2. Если я использую
ax.set_ylim(a, b)
с другимиa
иb
matplotlib изменит форму круга, что плохо. Итак, мне нужно использовать,plt.axis('equal')
но он игнорируетset_ylim
…3. Как только вы начнете устанавливать свою ось x или ось y, она будет любой формы, «равной», только если вы будете осторожны. Вы можете поставить plt.axis(‘equal’) перед ax.set_ylim (-5,5) n ax.set_xlim (-5,5) в моем коде выше, и это сработает и выдаст ту же фигуру, что и выше.
4. Попробуйте plt.axis([-5.,5.,-5.,5.], ‘ равно’), но это создаст ту же фигуру, что я описал в моем предыдущем комментарии.
Ответ №3:
Вам просто нужно
ax.set_ylim(-5, 5)
или даже
plt.ylim(-5, 5)
Комментарии:
1. @RomaKarageorgievich: Попробуйте использовать
fig = plt.figure(figsize=(6, 6))
, т.Е. квадратную фигуру
Ответ №4:
Я думаю, вы просто пытаетесь установить ylim (-5,5)