如何以灰度转换 Cartopy 瓦片 (2022)

How to convert Cartopy tiles in gray scale (2022)

我正在尝试将地形数据显示为背景,以便将我拥有的一些洪水数据放在最上面。而且我想以某种颜色比例(灰色似乎很流行)显示此地形,以避免在我的颜色条中为洪水数据使用该颜色以避免混淆。

我正在使用 Cartopy 的 img_tiles,同样的问题实际上在 4 年前就已经被问过 ()。但是现在解决方案(添加 cmap="...")似乎不再适用于较新版本的 Cartopy。尝试“cmap”时出现以下错误: error。那么,有没有其他方法可以将图像转换为灰度以进行绘图?

我的代码如下:

import matplotlib.pyplot    as plt
import cartopy.crs          as ccrs
import cartopy.io.img_tiles as cimgt

fig = plt.figure(figsize=(10,7.5))
ax  = plt.axes(projection=ccrs.PlateCarree())

[lon0,lat0,lon1,lat1] = [102., 11., 107., 15.]
ax.set_extent([lon0, lon1, lat0, lat1])

stamen_terrain = cimgt.Stamen(desired_tile_form="L", style="terrain-background") 
ax.add_image(stamen_terrain, 8, cmap='gray')

没有 cmap='gray',代码可以工作,但它会给我一个固定的颜色: default color

编辑 1:我对 ShadeReliefESRI 有同样的问题,问题似乎不是我如何获取地形数据,而是我如何显示它,轴 (ax) 的创建方式或功能 ax.add_image() 工作。当我添加 cmap 时,结果是一样的。代码如下:

from cartopy.io.img_tiles import GoogleTiles
class ShadedReliefESRI(GoogleTiles):
    # shaded relief
    def _image_url(self, tile):
        x, y, z = tile
        url = ('https://server.arcgisonline.com/ArcGIS/rest/services/' \
               'World_Shaded_Relief/MapServer/tile/{z}/{y}/{x}.jpg').format(
               z=z, y=y, x=x)
        return url

ax.add_image(ShadedReliefESRI(), 8, cmap ='gray')

编辑 2:尝试用 Spyder 绘图,有趣的是,图形仍然显示,看起来不错,但错误也出现并且阻止我使用 savefig()。

我没有问题 运行 你的代码。我用cartopy版本0.19.0.post1.

如果您更喜欢 B/W 图片作为背景,可以从 ref 中选择“碳粉”贴图。例如,使用此代码片段

stamen_terrain = cimgt.Stamen(desired_tile_form='RGB', style="toner")
ax.add_image(stamen_terrain, 8, alpha=0.4)

你可以得到这个情节: