Задать стиль линий для линий долготы и широты в базовой карте matplotlib? - PullRequest
0 голосов
/ 13 февраля 2019

Я использую maplotlib Basemap для рисования карт мира и хочу включить линии долготы и широты.Это можно сделать с помощью drawmeridians() и drawparallels(), но стиль линии соответствующих строк можно установить только через ключевое слово dashes.В соответствии с документацией см. см. Здесь , это должно работать следующим образом:

тире для меридианов (по умолчанию [1,1], т.е. 1 пиксель включен, 1 пиксель выключен)

Я пытался dashes=[1,0], но это не сработало.Есть ли простой способ иметь сплошной линейный стиль?

Вот мой код:

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.basemap import Basemap

fig1, ax1 = plt.subplots(1,1)

map1 = Basemap( resolution='l', projection='mill',
                llcrnrlat=-60., llcrnrlon=-180.,
                urcrnrlat=90.,  urcrnrlon=180. )

map1.drawcoastlines()
map1.drawmapboundary( fill_color='aqua' )
map1.fillcontinents( color='coral', lake_color='aqua' )

# labels=[left,right,top,bottom]
map1.drawparallels( np.arange(-80.,81.,20.),   labels=[True,True,False,False] )
map1.drawmeridians( np.arange(-180.,181.,40.), labels=[False,False,True,True] )

plt.show()

Вот итоговая карта: enter image description here


Редактировать 1 : Я только что попробовал на другом компьютере, и там это работает, то есть dashes=[1,0] приводит к сплошной линейный стиль.Используемая на этом компьютере версия (в соответствии с pip freeze)

basemap==1.2.0

matplotlib==2.2.3

Как только я снова получу доступ к исходному компьютеру, Я проверю, что там происходит (и какие версии установлены).

Редактировать 2 : Вернувшись к компьютеру, где он не работал, теперь я могу немного рассказатьБольше.Сначала используются следующие версии:

basemap==1.1.1

matplotlib==3.0.2

Затем сообщение об ошибке (которое я забыл включить ранее):

ValueError: Все значения в тире-списке должны быть положительными

Редактировать 3 : ради полноты (и поскольку это было частично полезно для поиска решения), вот полный Traceback:

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1540, in __call__
    return self.func(*args)
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/backends/backend_tkagg.py", line 280, in resize
    self.show()
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/backends/backend_tkagg.py", line 351, in draw
    FigureCanvasAgg.draw(self)
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/backends/backend_agg.py", line 464, in draw
    self.figure.draw(self.renderer)
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/artist.py", line 63, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/figure.py", line 1143, in draw
    renderer, self, dsu, self.suppressComposite)
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/image.py", line 139, in _draw_list_compositing_images
    a.draw(renderer)
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/artist.py", line 63, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/axes/_base.py", line 2409, in draw
    mimage._draw_list_compositing_images(renderer, self, dsu)
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/image.py", line 139, in _draw_list_compositing_images
    a.draw(renderer)
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/artist.py", line 63, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/lines.py", line 822, in draw
    drawFunc(renderer, gc, tpath, affine.frozen())
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/lines.py", line 1267, in _draw_lines
    self._lineFunc(renderer, gc, path, trans)
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/lines.py", line 1297, in _draw_dashed
    gc.set_dashes(self._dashOffset, self._dashSeq)
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/backend_bases.py", line 1007, in set_dashes
    raise ValueError("All values in the dash list must be positive")

1 Ответ

0 голосов
/ 14 февраля 2019

После некоторых исследований сообщений об ошибках на github я нашел решение [1], dashes=(None,None):

map1.drawmeridians( np.arange(-180.,181.,40.), labels=[False,False,True,True], dashes=(None,None) )

[1] https://github.com/matplotlib/basemap/issues/173#issuecomment-68243710

...