我正在尝试将 matplotlib 轴放置在 cartopy 图上的特定坐标处,但不知道如何正确设置位置。代码应该:
- 绘制德国的正投影
- 在柏林的位置添加文字“柏林”
- 在柏林的位置添加直方图
我的代码如下:
import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
plt.figure(figsize=(8, 8))
extent = [6, 15, 47, 55] # Extent of Germany in Lat/Long
lat, lon = 52.520007, 13.404954 # Location of Berlin
# Plot our coastline and set the extent
ax = plt.axes(projection=ccrs.Orthographic(central_longitude=10.5, \
central_latitude=51.0, \
globe=None))
ax.coastlines('10m')
ax.set_extent(extent)
# Add text at the location of Berlin
plt.text(lon, lat, 'Berlin', \
verticalalignment='center', \
horizontalalignment='right', \
transform=ccrs.PlateCarree())
# Add subplot
sub_ax = plt.axes([(lon-extent[0])/(extent[1] - extent[0]), \
(lat-extent[2])/(extent[3] - extent[2]), \
.1, .1], \
axisbg='none')
plt.hist(np.random.randn(100), 10, normed=1)
如您所见,直方图不在柏林,因为(我认为)它与图形的边界框相关,而不是轴。我试过transform=ax.transAxes
像你一样添加plt.text
,但这会unhashable type
在BboxTransformTo
.
我应该补充一点,我知道我的位置计算通常不起作用,因为我没有使用欧几里得几何,但就我的目的而言,它已经足够接近了。