Я использовал cartopy с matplotlib в python 2.7 для визуализации некоторых данных на картах. Но когда я пытаюсь удалить оси осей (верхнюю и правую) с помощью следующего фрагмента кода:
ax1.spines['top'].set_visible(False)
ax1.spines['right'].set_visible(False)
Это не сработает. Установка толщины позвоночника также не работает:
ax1.spines['left'].set_linewidth(3)
ax1.spines['bottom'].set_linewidth(3)
Приведенные выше строки кода не влияют на графики, когда я использую картопроекцию. Но если я использую обычные оси matplotlib, они работают нормально.
Я попробовал упомянутый метод rcParams здесь , но безрезультатно.
Я включаю урезанную версию моего кода ниже:
lons=np.arange(10, 50, .5)
lats=np.arange(7, 44, .5)
xticks=np.arange(math.ceil(lons.min()),
math.floor(lons.max())+4, 4)
yticks=np.arange(math.ceil(lats.min()),
math.floor(lats.max())+4, 4)
fig=plt.figure()
ax1=fig.add_subplot(111,
projection=ccrs.PlateCarree())
ax1.set_extent([lons[0], lons[-1],
lats[0], lats[-1]],
crs=ccrs.PlateCarree())
ax1.coastlines()
ax1.set_xticks(xticks)
ax1.set_yticks(yticks)
ax1.spines['top'].set_visible(False)
ax1.spines['right'].set_visible(False)
ax1.spines['left'].set_linewidth(3)
ax1.spines['bottom'].set_linewidth(3)
plt.show()
Я использую miniconda для управления пакетами, и используются следующие версии соответствующих модулей:
Python - 2.7.16
matplotlib - 2.3.3
cartopy - 0.17.0
Итак, как я могу удалить эти шипы при использовании cartopyпрогнозы?
ОБНОВЛЕНИЕ
Я копаю глубже и нашел это:
frameon = False не удаляет фрейм карты
Невозможно изменить ширину границы картопных осей
, которые связаны с моей проблемой. Из информации в этих сообщениях я нашел способ решения своей проблемы:
Сначала необходимо отключить оси или позвоночники с помощью следующего кода.
ax1.outline_patch.set_visible(False)
Затем выможно использовать метод axis.spines [''] для включения отдельных шипов, как показано ниже.
ax1.spines['left'].set_visible(True)
ax1.spines['bottom'].set_visible(True)
и затем установить ширину линии позвоночника:
ax1.spines['left'].set_linewidth(3)
ax1.spines['bottom'].set_linewidth(3)
Вот результат:
Есть ли более правильный способ делать то, что я хочу?