gpt4 book ai didi

python - 如何在Python中设置 basemap 的偏移量?

转载 作者:行者123 更新时间:2023-12-01 08:42:07 24 4
gpt4 key购买 nike

这是 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 和轴之间添加更多空间。但是,当添加xoffsetyoffset时,空间会更小。

example

最佳答案

basemap 不再积极开发,但维护仍会持续一段时间。这意味着由于其他包的更改而导致的问题仍将得到修复,但不会添加新功能。不管怎样,修​​复部分可能需要一些时间,我猜测平行线和经线的 xoffset 功能正在受到影响。但是,查看basemap文档,xoffsetyoffset的功能描述为

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()

结果图如下所示:

Result of the above code

关于python - 如何在Python中设置 basemap 的偏移量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53457514/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com