Как убедиться, что оси x и y имеют одинаковые размеры? - PullRequest
0 голосов
/ 07 января 2019

Я хочу, чтобы оси x и y были одинаковой длины ( т.е. сюжет за вычетом легенды должен быть квадратным ). Я хочу нарисовать легенду снаружи (я уже смог поставить легенду вне коробки). Интервал x axis в данных (x_max - x_min) не совпадает с интервалом y axis в данных (y_max - y_min).

Это соответствующая часть кода, которая у меня есть на данный момент:

plt.legend(loc='center left', bbox_to_anchor=(1, 0.5), fontsize=15 )
plt.axis('equal')
plt.tight_layout()

Следующая ссылка является примером выходного графика, который я получаю: plot

Как я могу это сделать?

Ответы [ 3 ]

0 голосов
/ 08 января 2019

Будет ли plt.axis('scaled') тем, что вы ищете? Это дало бы квадратный график, если бы границы данных были равны.

Если это не так, вы можете получить квадратный график, установив соотношение осей к соотношению xlimits и ylimits.

import numpy as np
import matplotlib.pyplot as plt

fig, (ax1, ax2) = plt.subplots(1,2)

ax1.plot([-2.5, 2.5], [-4,13], "s-")
ax1.axis("scaled")

ax2.plot([-2.5, 2.5], [-4,13], "s-")
ax2.set_aspect(np.diff(ax2.get_xlim())/np.diff(ax2.get_ylim()))

plt.show()

enter image description here

0 голосов
/ 08 января 2019

Что-то, что еще не было упомянуто, но которое может дать вам квадратный вывод, - это просто установить размер фигуры, используя figsize=(x,y) при построении фигуры. Например,

import matplotlib.pyplot as plt
import numpy as np
import random

x = np.arange(0, 10, 0.2)
y = np.zeros((len(x)))
for ii in range(len(x)):
    y[ii] = random.random()*20

fig = plt.figure(figsize=(5,5), dpi=150)
plt.scatter(x, y, label="Data", marker="+")
plt.title("Title")
plt.legend(bbox_to_anchor=(1.01, 0.5), loc="center left", borderaxespad=0.)
plt.show()

image

Важное примечание Этот метод не создает квадратный график, если также используется plt.tight_layout() - при этом всегда будут сжиматься метки и все, что добавляется (заголовок, легенда, метки осей и т. Д.) в область, созданную figsize, тем самым уменьшая соотношение сторон ниже 1: 1.

0 голосов
/ 08 января 2019

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

axes = plt.gca()
axes.set_xlim([xmin,xmax])
axes.set_ylim([ymin,ymax])

Лучшим вариантом будет перебирать ваши данные, чтобы найти максимальные x- и y-координаты, взять большее из этих двух чисел, добавить немного больше к этому значению, чтобы действовать как буфер, и установить xmax и ymax к этому новому значению. Вы можете использовать аналогичный метод для установки xmin и ymin: вместо того, чтобы находить максимумы, найдите минимумы.

Чтобы поставить легенду вне сюжета, я бы посмотрел на этот вопрос: Как вывести легенду из сюжета

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