【问题标题】:matplotlib axes.set_aspect('equal') doesn't behave like expectedmatplotlib axes.set_aspect('equal') 的行为不像预期的那样
【发布时间】:2013-09-05 12:06:41
【问题描述】:

我需要 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

图一:

图2:

【问题讨论】:

  • 实际上它的行为符合预期。set_aspect('equal') 表示 x 轴上的一个单位与 y 轴上的一个单位长度相同,如图 1 所示。
  • 您可以将数值传递给set_aspect,参见documentation。取xy 的商,您应该能够缩放轴以使它们具有相同的长度。
  • 请注意,您的第一个示例(图 1)实际上不是正方形;它大约 430 像素宽 x 400 像素高。这与两个轴的数据范围略有不同(x 轴为 0 到 3.5,y 轴为 0 到 3.25)是一致的,因为set_aspect('equal') 强制相同的数据缩放(每像素的数据值)两个轴。

标签: python matplotlib axes


【解决方案1】:

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

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

【讨论】:

  • 请注意,此命令必须出现在 绘图命令之后。
猜你喜欢
  • 2017-04-11
  • 1970-01-01
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-11
  • 2016-01-28
  • 2018-12-15
相关资源
最近更新 更多