简体   繁体   English

使用 cartopy 在背景地图上绘制数组

[英]Plotting array over background map using cartopy

I am trying to plot an numpy array over a background map tile using cartopy.我正在尝试使用 cartopy 在背景地图图块上绘制一个 numpy 数组。 When including the background map, the array is not visible.当包含背景地图时,数组不可见。

I am adding background map tiles using cimgt and geo_axes.add_image() .我正在使用cimgtgeo_axes.add_image()添加背景地图图块。 This method has worked for me before when plotting points with plt.scatter() .在使用plt.scatter()绘制点之前,此方法对我plt.scatter() I have tried several projections (PlateCarree, Mercator, and EPSG32630) and map tiles (OSM, GoogleTiles).我尝试了几种投影(PlateCarree、Mercator 和 EPSG32630)和地图图块(OSM、GoogleTiles)。 The array contains np.nans and floats.该数组包含 np.nans 和浮点数。

Here is my code:这是我的代码:

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

# array creation
array = np.asarray([[1, np.nan, np.nan], [1, 1, 1], [2, 2, 1]])
x_coords = np.asarray([690000, 691000, 692000])
y_coords = np.asarray([4958000, 4959000, 496000])

# create figure
fig = plt.figure(figsize=(8, 6), dpi=100)

# create geo axes
projection = ccrs.epsg(32630)
geo_axes = plt.subplot(projection=projection)

# add open street map background
# when commenting the two following lines, the data array is plotted correctly
osm_background = cimgt.OSM()
geo_axes.add_image(osm_background, 14)

# plot dataset
plt.imshow(
    array,
    origin="upper",
    extent=(x_coords[0], x_coords[1], y_coords[0], y_coords[1]),
    transform=projection,
)

# show plot
plt.show()

I can't seem to find what is causing the issue.我似乎无法找到导致问题的原因。 Has anyone encountered this before, or can anyone see what I am doing wrong?有没有人遇到过这个问题,或者任何人都可以看到我做错了什么?

You need some tricks to reveal all the plotted features.您需要一些技巧来显示所有绘制的特征。 Here is the relevant code to update yours, and the output plot that shows both the (OSM) background and the array-image.这是更新您的相关代码,以及显示(OSM)背景和阵列图像的输出图。

# plot dataset
plt.imshow(
    array,
    origin="upper",
    extent=(x_coords[0], x_coords[1], y_coords[0], y_coords[1]),
    transform=projection,
    alpha=0.25,  # allows the background image show-through
    zorder=10    # make this layer on top
)
# draw graticule and labels
geo_axes.gridlines(color='lightgrey', linestyle='-', draw_labels=True)

The result:结果:

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM