【问题标题】:Is it possible to "get" vmin/vmax from axes after using imshow()?使用 imshow() 后是否可以从轴“获取”vmin/vmax?
【发布时间】:2020-07-03 02:00:29
【问题描述】:

我尝试在 matplotlib 文档和源代码中寻找这个,但找不到答案:

问题:

是否可以从AxesAxesImage 对象中“获取”用于vminvmax 的参数(在创建时传入)? (通过ax.imshow()创建后)

所以类似于ax.get_vminmax()

场景:

我想显示一个具有指定 vmin/vmax 的 16 位灰度 numpy 数组。所以没问题,只需要用imshow()指定vmin/vmax即可。

但我还想稍后在该图像上放置一个叠加层(使用ax.text()),它将在叠加层中显示 vmin/vmax 值。

我想使用一个通用函数来做到这一点,不需要记住之前指定的 vmin/vmax 并传递给我的“注释”函数,而是可以传递了一个 Axes,然后通过查询 Axes 对象“获取”vmin/vmax。

这只是出于代码的精妙之处,不必将一堆 args 添加到不同的函数中,而不仅仅是能够查询传入的对象本身,

谢谢! 理查德

【问题讨论】:

  • 你从可映射的标量或其规范中得到它。坐标区不知道它,因为坐标区上可以有可能绘制的对象。
  • 谢谢!因此,如果我已经有了轴,那么正确的方法是针对轴中的每个“图像”,然后使用 get_clim()? for a in ax.get_images(): print('这里是 vmin/max:', a.get_clim())
  • 当然,或者只是在制作图像时跟踪它们。
  • 酷 - 谢谢乔迪!
  • @Richard 你应该写下来作为未来访客的答案 - 对我很有帮助!

标签: python matplotlib


【解决方案1】:

这样做的方法是首先意识到(我没有)每个axes 可以有多个图像 - 所以你需要做的是获取axes 中每个图像的 vmin/vmax .

...虽然通常我想,像我一样,大多数人在每个轴上只有一个图像。

这是一个代码 sn-p,如果 ax 是您的轴的变量,并且您只想要第一张图像的 vmin/vmax:

imgs = ax.get_images()
if len(imgs) > 0:
   vmin, vmax = imgs[0].get_clim()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-11
    • 2014-12-28
    • 2013-02-07
    • 2015-07-22
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多