[英]How to deal well with normal and cartopy projection on the same figure?
[英]Why does adding a legend in this cartopy projection figure significantly increase the execution time (and how can fix this)?
所以我寫了一個腳本來制作工作正常的數字(見下面的模型示例)。 但是當我在圖中添加圖例時,執行時間增加了很多。 我真的不明白這里發生了什么,我天真地認為簡單地添加一個圖例並不是一件復雜的事情。
我懷疑這與 cartopy 投影有關,因為如果我不使用它,它就可以正常工作。
這里有什么問題,我該如何避免?
有問題的代碼:
import numpy as np
import xarray as xr
import matplotlib
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
# Mockup dataset
num = 300
lat = np.linspace(-54,-59,num=num)
lon = np.linspace(-5,5, num=num)
data = np.outer(lat,lon)
ds = xr.DataArray(data=data,
dims=["lat", "lon"],
coords=dict(lon=lon, lat=lat))
# Map projection
map_proj = ccrs.SouthPolarStereo()
ax = plt.axes(projection=map_proj)
ax.gridlines(draw_labels=True)
ax.set_extent([-3,4,-58,-54])
# Plot image
ds.plot(cmap="gray",
add_colorbar=False,
transform=ccrs.PlateCarree(), # data projection
subplot_kws={'projection': map_proj}) # map projection
# Plot contours
cs = ds.plot.contour(transform=ccrs.PlateCarree())
# Make legend
proxy = [matplotlib.lines.Line2D([],[], c=pc.get_color()[0]) for pc in cs.collections]
labels = ["foo"] * len(cs.collections)
plt.legend(proxy, labels)
沒有cartopy投影的代碼:
import numpy as np
import xarray as xr
import matplotlib
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
# Mockup dataset
num = 300
lat = np.linspace(-54,-59,num=num)
lon = np.linspace(-5,5, num=num)
data = np.outer(lat,lon)
ds = xr.DataArray(data=data,
dims=["lat", "lon"],
coords=dict(lon=lon, lat=lat))
# Plot image
ds.plot(cmap="gray",
add_colorbar=False) # map projection
# Plot contours
cs = ds.plot.contour()
# Make legend
proxy = [matplotlib.lines.Line2D([],[], c=pc.get_color()[0]) for pc in cs.collections]
plt.legend(proxy, labels)
plt.legend(proxy, labels)
默認為loc='best'
,它使用一種算法,如果您的軸中有大量數據,該算法可能會很慢,如果該數據也有復雜的轉換,則特別慢。 而是ax.legend(proxy, labels, loc='upper right')
執行ax.legend(proxy, labels, loc='upper right')
。 見https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.legend.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.