matplotlib axes.set_aspect('equal')的行为与预期不符

时间:2013-09-02 11:31:36

标签: python matplotlib axes

我需要matplotlib中的一个数字,其中两个轴的长度始终相同。为此,我使用“相等”选项。在大多数情况下,它工作得很好,我得到了预期的结果(见图1),但是当y轴的值远高于x时,该图显示了一个意外的行为(见图2)。有谁知道matplotlib的这种行为?

Danke,Jörg

        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:

When it works

图2:

When it doesn't work

1 个答案:

答案 0 :(得分:12)

equal表示x和y维度在数据坐标中的长度相同。要获得方轴,您可以手动设置宽高比:

ax.set_aspect(1./ax.get_data_ratio())