【问题标题】:Rotating an ellipse but axes have vastly different scales which leads to distortion旋转椭圆,但轴的比例差异很大,这会导致失真
【发布时间】:2020-01-08 23:48:23
【问题描述】:

所以,我正在尝试绘制一些我拥有的数据,并在其之上绘制一个具有给定均值和协方差的置信椭圆。我对 Python 很陌生,但我认为将其可视化要比在 Java 中更容易(我在其中计算了使用的这些值)。

我现在遇到的问题是我根本无法旋转我正在绘制的椭圆而不扭曲它。我不完全确定是否确实如此,但我认为这是因为轴上的比例差别很大(x 从 0 到 6,y 从 40 到 100)。我再次猜测,但我想旋转不会缩放高度(显然设置为适合 y 轴从 40 到 100)所以它对于我的短 x 轴来说太长了。

我的问题:有没有更好的方法来做到这一点,或者在旋转后缩放椭圆使其再次适合?由于我对 Python 不太了解,所以我只是通过不同的教程来看看是什么让我快速获得结果。不确定这是否是“正确”的开始方式。然而,我所知道的是,我看到的所有示例都有类似比例的轴,因此我无法找到解决问题的适当方法。

这只是代码的一部分,实际数据不包括在内,但它仍然应该可以复制粘贴椭圆,所以如果你改变旋转角度,你们可以明白我的意思(这里的 45示例)。

import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse

meanX = 2.0374
meanY = 54.4897
secondLongest = 0.0700
longest = 33.7679

ax = plt.subplot(111)

plt.axis([0, 6, 40, 100])
#plt.plot(duration, waitperiod, "rx")
plt.xlabel("Duration")
plt.ylabel("Time between eruptions")

#if rotation is set to 0, it works perfectly fine but I want a different angle
ellipse = Ellipse((meanX, meanY), 2*np.sqrt(5.991*secondLongest), 2*np.sqrt(5.991*longest), 45)

ax.add_artist(ellipse)

plt.show()

【问题讨论】:

    标签: python numpy matplotlib plot


    【解决方案1】:

    它工作得非常好,您看到的明显失真确实是因为图中 X 和 Y 轴的缩放比例不同。 例如。尝试使用这些轴限制以查看该角度不再“扭曲”:

    plt.axis([-20, 20, 40, 80])
    

    (并确保您的绘图窗口也是方形的)

    如果这个椭圆代表置信度,我怀疑你想重新调整它以适应你的任意轴限制,而不是你可能想设置你的轴限制来适应你的数据和置信椭圆......

    【讨论】:

    • 感谢您的回答。但是,当然选择轴限制来拟合数据。如果我更改限制,数据点将被扭曲为基本上是一条直线,因为如果比例膨胀到 -20-20,那么小的 x 差异 (0-6) 将不会真正显示出来。你知道我是否可以手动设置轴刻度吗?所以我可以将我所有的 y 数据除以 10,这将使它们与我的 x 数据处于同一个范围内。如果我可以改变刻度,我基本上可以说“显示值但 x10”,所以它看起来像是旧的比例,但在内部它仍然使用数据除以 10。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多