当前位置:  开发笔记 > 编程语言 > 正文

获得轴的纵横比

如何解决《获得轴的纵横比》经验,为你挑选了1个好方法。

是否有一种简单可靠的方法来确定axes其方面设置'auto'为何时的当前宽高比?

要检查的显而易见的事情是ax.get_aspect(),但这只是回归'auto'.我可以将它设置为任意常量值ax.set_aspect(aspect),之后返回相同的常量ax.get_aspect().默认情况下(非常有用)我们有aspect = 'auto',在这种情况下,自动计算和调整宽高比以匹配数据限制和轴大小.
如何获得自动选择的数字宽高比?

为了澄清,这既不是返回的数据限制ax.get_data_ratio()的宽高比,也不是由(图中)返回的图形或子图的显示尺寸的宽高比fig.get_figheight() / fig.get_figwidth().它有点微妙,因为它取决于显示尺寸和数据限制.(这可能导致混淆不同的比率,以及我认为让它易于访问很重要的原因.)



1> Mad Physicis..:

从文档中,纵横比是x轴和y轴中数据到显示比例单位的比率.即,如果在y方向上每个显示器有10个数据单元,在x方向上每个显示单元有1个数据单元,则该比率为1/10.圆圈的宽度比它高10倍.这对应于num以下方面的声明:

将拉伸圆圈,使得高度是宽度的num倍.aspect = 1与aspect ='equal'相同.

基于您所看到的相同原始代码(matplotlib.axes._base.adjust_aspect从1405行开始),我认为只要您只需要线性笛卡尔坐标轴的这个比率,我们就可以得到一个简化的公式.极点和对数轴的事情变得复杂,所以我会忽略它们.

重申公式:

(x_data_unit / x_display_unit) / (y_data_unit / y_display_unit)

这恰好与

(y_display_unit / x_display_unit) / (y_data_unit / x_data_unit)

最后一个公式只是两个方向上的显示尺寸除以x和y限制的比率.请注意,ax.get_data_ratio,因为返回的实际数据边界,而不是在所有的轴限的结果适用于这里:

from operator import sub
def get_aspect(ax):
    # Total figure size
    figW, figH = ax.get_figure().get_size_inches()
    # Axis size on figure
    _, _, w, h = ax.get_position().bounds
    # Ratio of display units
    disp_ratio = (figH * h) / (figW * w)
    # Ratio of data units
    # Negative over negative because of the order of subtraction
    data_ratio = sub(*ax.get_ylim()) / sub(*ax.get_xlim())

    return disp_ratio / data_ratio

现在让我们测试一下:

from matplotlib import pyplot as plt
fig, ax = plt.subplots()
ax.set_aspect('equal')
print('{} == {}'.format(ax.get_aspect(), get_aspect(ax)))
ax.set_aspect(10)
print('{} == {}'.format(ax.get_aspect(), get_aspect(ax)))

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有