【问题标题】:plot over image, where extent is not yet known when plotting image在图像上绘制,绘制图像时范围尚不清楚
【发布时间】:2018-10-26 23:02:57
【问题描述】:

我想创建一个显示背景图像的图形,其中包含叠加的散点图和线图:

如您所见,坐标轴刻度显示图像坐标。散点图和线图也在图像坐标中给出 - 这是不希望的。在没有背景图像的情况下,散点图和线图应该仍然能够工作(并且有意义)。范围未知,因为该数字首先用于确定范围(交互)。

相反,我想指定背景图像中显示的坐标系中的散点图和线图(单位 m³/h 和 m):从图像坐标到“顶部轴”坐标的转换大致为( 110,475) -> (0,10) 和 (530,190) -> (8,40)。

原则上我可以看到两种方法:

  • 在添加后指定图像范围。但是,我在任何地方都没有看到这一点。这个例子展示了在调用imshow()时知道范围是如何完成的:Plot over an image background in python
  • 使用 twinx twin y 在图像轴的顶部添加一个轴,其中 x,x 和 y,y 对都是紧密耦合的。我只看到允许我指定共享 x 共享 y 轴的功能,而不是两者。

【问题讨论】:

    标签: python image matplotlib plot axis


    【解决方案1】:

    这里的限制似乎是“散点图和线图应该仍然能够在没有背景图像的情况下工作(并且有意义)。”。然而,这并不意味着您不能使用 extent 关键字参数。

    在添加图像时,您需要指定范围。

    plt.scatter(...)
    plt.plot(...)
    plt.imshow(..., extent = [...])
    

    您也可以稍后设置范围,如果由于某种原因未在问题中解释,即

    plt.scatter(...)
    plt.plot(...)
    im = plt.imshow(...)
    
    im.set_extent([...])
    

    最后,您也可以决定删除图像,然后重新绘制;这次是想要的程度,

    plt.scatter(...)
    plt.plot(...)
    im = plt.imshow(...)
    
    im.remove()
    im = plt.imshow(..., extent=[...])
    

    【讨论】:

    • 感谢您指出问题中缺少先前不知道范围的原因。我已经添加了。
    • 只在调用 imshow 后设置范围会导致图像失真(窄/高),因为实际 x 范围小于 y 范围。从某个角度来看,这可能是有道理的,但我希望图像保持其纵横比。
    • 这将由aspect 确定。您可以将其设置为aspect="auto" 或您需要的任何其他号码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 1970-01-01
    • 2017-07-05
    • 2012-11-24
    相关资源
    最近更新 更多