簡體   English   中英

為什么在這個 cartopy 投影圖中添加圖例會顯着增加執行時間(以及如何解決這個問題)?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM