Как мне применить квадратную сетку в matplotlib - PullRequest
0 голосов
/ 03 мая 2018

Используя matplotlib.pyplot, мне нужно нарисовать базовые двухмерные векторные диаграммы пространства, и мне нужно, чтобы единицы по оси x и по оси y были визуально равны по длине (от 1 до 1), чтобы каждая единица сетки выглядела квадратной (не сдавленной) не удлиненный). Чтобы было ясно, мне не нужен квадратный график или он мне нужен, но мне нужно, чтобы единицы измерения всегда выглядели квадратными, независимо от соотношения сторон графика или длины любой оси.

Я пытался использовать ось («равно»), и это не работает. Обратите внимание, что я работаю в блокноте Jupyter, который, похоже, хочет ограничить высоту шкалы. (Это может иметь некоторый мешающий предел для pyplot? Я не знаю). Я боролся с этим в течение нескольких часов и не нахожу ничего, что работает.

def plot_vector2d(vector2d, origin=[0, 0], **options):
    return plt.arrow(origin[0], origin[1], vector2d[0], vector2d[1],
          head_width=0.2, head_length=0.3, length_includes_head=True,
          width=0.02, 
          **options)

plot_vector2d([1,0], color='g')
plot_vector2d([0,1], color='g')

plot_vector2d([2,10], color='r')
plot_vector2d([3,1], color='r')

plt.axis([-3, 6, -2, 11], 'equal')
plt.xticks(np.arange(-3, 7, 1))
plt.yticks(np.arange(-2, 11, 1))
plt.grid()
plt.show()

Посмотрите, как вертикальная ось сдавливается по сравнению с горизонтальной. Ось («равно»), кажется, не имеет никакого эффекта.

See how the vertical axis is squashed compared to the horizontal. axis('equal') seems to have no effect.

1 Ответ

0 голосов
/ 03 мая 2018

Вам необходимо установить соотношение сторон вашей оси на «равный». Вы можете сделать это, используя set_aspect. В документации говорится:

«равное» одинаковое масштабирование от данных до единиц измерения для x и y

Ваш код становится:

def plot_vector2d(vector2d, origin=[0, 0], **options):
    return plt.arrow(origin[0], origin[1], vector2d[0], vector2d[1],
          head_width=0.2, head_length=0.3, length_includes_head=True,
          width=0.02, 
          **options)

plot_vector2d([1,0], color='g')
plot_vector2d([0,1], color='g')

plot_vector2d([2,10], color='r')
plot_vector2d([3,1], color='r')

plt.axis([-3, 6, -2, 11], 'equal')
plt.grid()
plt.gca().set_aspect("equal")

plt.show()

Что дает:

enter image description here

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