2

I'm trying to display a circle of fixed size in a leaflet map.

I tried with .add_artist()(see here) and I'm now trying with .add_patch()

import mplleaflet
import matplotlib.pyplot as plt
import matplotlib as mpl

fig, ax = plt.subplots()
x = 2.363561
y = 48.951918
r = 20
circle1 = mpl.patches.Circle((x,y), radius=r)
circle2= plt.Circle((x, y), r, color='r')

#ax.add_patch(circle1)
#ax.add_patch(circle2) 

mplleaflet.show(fig=ax.figure)

You can try to uncomment one of the two commented lines, it doesn't matter which line is uncommented, same error pops.

Here is the trace I get :

Traceback (most recent call last):

  File "<ipython-input-81-1fdd7f4a9d12>", line 16, in <module>
    mplleaflet.show(fig = ax.figure)

  File "C:\ProgramData\Anaconda3\lib\site-packages\mplleaflet\_display.py", line 180, in show
    save_html(fig, fileobj=f, **kwargs)

  File "C:\ProgramData\Anaconda3\lib\site-packages\mplleaflet\_display.py", line 131, in save_html
    html = fig_to_html(fig, **kwargs)

  File "C:\ProgramData\Anaconda3\lib\site-packages\mplleaflet\_display.py", line 84, in fig_to_html
    exporter.run(fig)

  File "C:\ProgramData\Anaconda3\lib\site-packages\mplleaflet\mplexporter\exporter.py", line 51, in run
    self.crawl_fig(fig)

  File "C:\ProgramData\Anaconda3\lib\site-packages\mplleaflet\mplexporter\exporter.py", line 118, in crawl_fig
    self.crawl_ax(ax)

  File "C:\ProgramData\Anaconda3\lib\site-packages\mplleaflet\mplexporter\exporter.py", line 138, in crawl_ax
    self.draw_patch(ax, patch)

  File "C:\ProgramData\Anaconda3\lib\site-packages\mplleaflet\mplexporter\exporter.py", line 227, in draw_patch
    mplobj=patch)

  File "C:\ProgramData\Anaconda3\lib\site-packages\mplleaflet\leaflet_renderer.py", line 125, in draw_path
    rings = list(iter_rings(data, pathcodes))

  File "C:\ProgramData\Anaconda3\lib\site-packages\mplleaflet\utils.py", line 14, in iter_rings
    raise ValueError('Unrecognized code: {}'.format(code))

ValueError: Unrecognized code: C

Any idea on how to solve this ?

===========================

EDIT :

Just to see what would happen, I tried doing the same thing than this, which is changing

elif code == 'L': ring.append(point)

to

elif code == 'L' or code == 'Z' or code == 'S' or code == 'C': ring.append(point)

in mplleaflet\utils.py, line 11 and 12. Here is what I got :

enter image description here

===========================

EDIT 2 to answer comment

mpl.patches.Rectangle and plt.Rectangle show up :

rect1 = mpl.patches.Rectangle((x,y), 1, 1, color = 'r')
rect2 = plt.Rectangle((x, y), 1, 1, fc='r')

enter image description here

Which seems to fit with a rectangle of 1 degree in latitude and 1 degree longitude (see here) (maybe ? Seems a bit small).

As for Polygons, well... At least they show up, but I guess there is a projection problem :

regpol1 = mpl.patches.RegularPolygon((x,y), 100, radius=r, color = 'r')
cirpol1 = mpl.patches.CirclePolygon((x +50,y), radius=r, color = 'b')

enter image description here

François M.
  • 4,027
  • 11
  • 30
  • 81

0 Answers0