这是 basemap 的一个示例:
fig = plt.figure(figsize=(10,6))
ax = fig.add_subplot(121)
ax.set_title('Default')
# miller projection
map = Basemap(projection='mill',lon_0=180)
# plot coastlines, draw label meridians and parallels.
map.drawcoastlines()
map.drawparallels(np.arange(-90,90,30),labels=[1,0,0,0])
map.drawmeridians(np.arange(map.lonmin,map.lonmax+30,60),labels=[0,0,0,1])
ax = fig.add_subplot(122)
ax.set_title('Add offset')
# miller projection
map = Basemap(projection='mill',lon_0=180)
# plot coastlines, draw label meridians and parallels.
map.drawcoastlines()
map.drawparallels(np.arange(-90,90,30),labels=[1,0,0,0],xoffset=100,yoffset=100)
map.drawmeridians(np.arange(map.lonmin,map.lonmax+30,60),labels=[0,0,0,1],xoffset=100,yoffset=100)
我想在 xlabel/ylabel 和轴之间添加更多空间。
但是,当添加xoffset
和yoffset
时,空间会更小。
最佳答案
basemap
不再积极开发,但维护仍会持续一段时间。这意味着由于其他包的更改而导致的问题仍将得到修复,但不会添加新功能。不管怎样,修复部分可能需要一些时间,我猜测平行线和经线的 xoffset 功能正在受到影响。但是,查看basemap
文档,xoffset
和yoffset
的功能描述为
xoffset: label offset from edge of map in x-direction (default is 0.01 times width of map in map projection coordinates).
yoffset: label offset from edge of map in y-direction (default is 0.01 times height of map in map projection coordinates).
通过操作 drawparallels()
和 drawmeridians()
生成的 Text
对象,可以很容易地模拟这一点。这些函数的结果存储在一个 dict
中,其中包含每个绘制的平行/子午线的列表元组,其中第二个包含文本标签。 Text
对象具有 get_position()
和 set_position()
方法,结合轴限制和上面的定义,可以用于计算偏移量:
from matplotlib import pyplot as plt
from mpl_toolkits.basemap import Basemap
import numpy as np
fig = plt.figure(figsize=(10,6))
ax = fig.add_subplot(121)
ax.set_title('Default')
# miller projection
map = Basemap(projection='mill',lon_0=180)
# plot coastlines, draw label meridians and parallels.
map.drawcoastlines()
map.drawparallels(np.arange(-90,90,30),labels=[1,0,0,0])
map.drawmeridians(np.arange(map.lonmin,map.lonmax+30,60),labels=[0,0,0,1])
ax = fig.add_subplot(122)
ax.set_title('Add offset')
# miller projection
map = Basemap(projection='mill',lon_0=180)
# plot coastlines, draw label meridians and parallels.
map.drawcoastlines()
##getting axes dimensions
x0,x1 = ax.get_xlim()
w = x1-x0
y0,y1 = ax.get_ylim()
h = y1-y0
xoffset = 0.05
yoffset = 0.05
result = map.drawparallels(np.arange(-90,90,30),labels=[1,0,0,0])
##
for key, (lines,texts) in result.items():
for text in texts:
x,y = text.get_position()
text.set_position((x0-xoffset*w,y))
result = map.drawmeridians(np.arange(map.lonmin,map.lonmax+30,60),labels=[0,0,0,1])
for key, (lines,texts) in result.items():
for text in texts:
x,y = text.get_position()
text.set_position((x,y0-yoffset*h))
plt.show()
结果图如下所示:
关于python - 如何在Python中设置 basemap 的偏移量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53457514/