Установите границы оси AxisArtist с помощью plt.Окружность в matplotlib

#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)