matplotlib axes.set_aspect('равно') не ведет себя как ожидалось
Мне нужна фигура в matplotlib, где обе оси всегда имеют одинаковую длину. Для этого я использую опцию "равно". В большинстве случаев это работает довольно хорошо, и я получаю ожидаемые результаты (см. Рисунок 1), но когда значения оси Y намного выше, чем x, рисунок показывает неожиданное поведение (см. Рисунок 2). Кто-нибудь знает такое поведение matplotlib?
Данке, Йорг
host = SubplotHost(fig, 111)
try:
min_x_val = min(x for x in self.x_values if x is not None)
max_x_val = max(self.x_values)
except ValueError:
return
max_y_val = list()
for n, evaluator in enumerate(self.cleaned_evaluators):
max_y_val.append(max(self.y_values[n]))
# axis settings
host.axis['left'].label.set_fontsize('small')
host.axis['left'].major_ticklabels.set_fontsize('small')
host.axis['bottom'].label.set_fontsize('small')
host.axis['bottom'].major_ticklabels.set_fontsize('small')
host.axis['bottom'].major_ticklabels.set_rotation(0)
host.set_ylabel(y_label)
host.set_xlabel(x_label)
host.set_xlim(0, max_x_val)
host.set_ylim(0, max_y_val)
host.minorticks_on()
host.toggle_axisline(False)
host.axes.set_aspect('equal')
host.grid(True, alpha=0.4)
return fig
Рисунок 1:
Фигура 2:
1 ответ
Решение
equal
означает, что размеры x и y имеют одинаковую длину в координатах данных. Чтобы получить квадратную ось, вы можете установить соотношение сторон вручную:
ax.set_aspect(1./ax.get_data_ratio())