Первая часть вопроса проста.Чтобы метка появилась, вы должны провести параллель, но np.arange(-40,40,20)
не включает 40
.Таким образом, если вы измените это утверждение на np.arange(-40,41,20)
, появится ваша метка 40N
.
Вторая часть в принципе должна быть разрешимой таким же образом, но в Basemap, очевидно, используется модуль долгот для вычисленияположение меток, поэтому просто используя np.arange(0,361,40)
при рисовании меридианов, вы получите две 0
метки друг над другом.Однако мы можем зафиксировать метки, которые генерирует drawmeridians
, и вручную изменить положение второй метки 0
.Метки хранятся в словаре, поэтому с ними легко иметь дело.Чтобы вычислить позицию x последней метки, я вычисляю разницу в позиции x между первой и второй меткой, умножаю ее на количество меридианов, которые нужно нарисовать (360/40), и добавляю позицию x первойэтикетка.
Вот полный пример:
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.basemap import Basemap
map = Basemap(llcrnrlon=0.,llcrnrlat=-40.,urcrnrlon=360.,urcrnrlat=40.,resolution='l')
map.drawcoastlines()
yticks = map.drawparallels(
np.arange(-40,41,20),labels=[1,0,1,1], linewidth=0.5, fontsize=7
)
xticks = map.drawmeridians(
np.arange(0,361,40),labels=[1,1,0,1], linewidth=0.5, fontsize=7
)
first_pos = xticks[0][1][0].get_position()
second_pos = xticks[40][1][0].get_position()
last_x = first_pos[0]+(second_pos[0]-first_pos[0])*360/40
xticks[360][1][0].set_position((last_x,first_pos[1]))
plt.show()
Вот результирующий график:
![result of the above code](https://i.stack.imgur.com/XO4us.png)
Надеюсь, это поможет.