【问题标题】:rio.plot.show with colorbar?rio.plot.show 与彩条?
【发布时间】:2020-08-03 05:29:17
【问题描述】:

使用 rio.plot.show 后如何添加颜色条? 我尝试了很多东西,但遇到了各种错误

这是我尝试的一种方法:

fig, ax = plt.subplots(figsize = (16, 16))

retted = rio.plot.show(ds, ax=ax, cmap='Greys_r')  

fig.colorbar(retted, ax=ax)
plt.title("Original")
plt.show()

这有错误:AttributeError: 'AxesSubplot' object has no attribute 'get_array'

【问题讨论】:

  • 我想一种解决方法是用i = ax.imshow(ds, cmap='Greys_r') 绘图,然后用 rio 绘图覆盖它,最后添加颜色条plt.colorbar(i)

标签: python matplotlib plot rasterio


【解决方案1】:

我按照上面david 的建议做了,它奏效了!

fig, ax = plt.subplots(figsize=(5, 5))

# use imshow so that we have something to map the colorbar to
image_hidden = ax.imshow(image_data, 
                         cmap='Greys', 
                         vmin=-30, 
                         vmax=30)

# plot on the same axis with rio.plot.show
image = rio.plot.show(image_data, 
                      transform=src.transform, 
                      ax=ax, 
                      cmap='Greys', 
                      vmin=-30, 
                      vmax=30)

# add colorbar using the now hidden image
fig.colorbar(image_hidden, ax=ax)

【讨论】:

  • 格式不错。你把功劳归功于大卫。你的第一个答案做得很好。我目前没有时间测试您的解决方案,所以我无法评论正确性。
  • @Marjeta 我遇到了同样的 OP 问题。我测试了这个答案并且它有效。根据此页面sigon.gitlab.io/post/2018-11-08-plot-raster-nodata-values,在我看来,默认情况下添加了颜色条...
  • 我在尝试不同的事情时偶然发现了这个解决方案。在探索是否有更优雅的解决方案时偶然发现了这个答案。这似乎是目前唯一的方法。
【解决方案2】:

我同意这个解决方案,但我想补充一点,如果你和我一样,我通常有一个 rasterio datasetreader 对象(使用 rasterio.open 读取 georeffed 栅格数据的结果),而不仅仅是一个原始 numpy大批。因此,对于 rasterio v1.1.8,我必须执行从 datasetreader 对象中提取 numpy 数组的额外步骤。以单波段为例:

dem = rasterio.open("GIS/anaPlotDEM.tif")
fig, ax = plt.subplots(figsize=(10,10))
image_hidden = ax.imshow(dem.read()[0])
fig.colorbar(image_hidden, ax=ax)
rasterio.plot.show(dem, ax=ax)

(我会将此添加为评论,但没有声誉积分)

【讨论】:

    【解决方案3】:

    plt.imshow() 和 rasterio.plot.show() 返回不同的对象。 plt.colorbar() 期待一个可映射的对象,所以它会感到困惑。因为光栅绘图是对 matplotlib 的包装,所以我认为最直接的方法是提供 maptlotlib 所期望的底层对象。

    retted = rio.plot.show(ds, ax=ax, cmap='Greys_r')
    im = retted.get_images()[0]
    fig.colorbar(im, ax=ax)
    

    【讨论】:

      猜你喜欢
      • 2016-02-28
      • 2019-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多