basemap icon indicating copy to clipboard operation
basemap copied to clipboard

Hollow markers are not transparent

Open jsh9 opened this issue 5 years ago • 3 comments

Hello,

When I tried to plot hollow markers on the map, the marker is actually filled, not transparent. See this map below:

image

Below is the code to reproduce this map:

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

lon_ll = -124.5  # lower left corner, longitude
lon_ur = -105.2  # upper right corner, longitude
lat_ll = 32.0    # lower left corner, latitude
lat_ur = 42.0    # upper right corner, latitude

f = plt.figure(dpi=100)
ax = plt.axes()

m = Basemap(llcrnrlon=lon_ll,llcrnrlat=lat_ll,
            urcrnrlon=lon_ur,urcrnrlat=lat_ur,\
            rsphere=(6378137.00,6356752.3142),\
            resolution='c',projection='merc',\
            lat_0=(lat_ll+lat_ur)/2,\
            lon_0=(lon_ll+lon_ur)/2,lat_ts=20.,
            epsg = 3310)

m.arcgisimage(service='World_Physical_Map', xpixels=120, epsg=3310, verbose=False)

m.drawstates()

LA = (34.05, -118.25)
LV = (36.175, -115.136389)
SF = (37.783333, -122.416667)
PH = (33.45, -112.066667)

ms = 15
alpha = 0.75

m.plot(*m(LV[1], LV[0]), marker='s', ms=ms,
       ls='none', mew=1.25,c='blue', fillstyle='none', alpha=alpha)
m.plot(*m(LA[1], LA[0]), marker='o', ms=ms,
       ls='none', mew=1.25,c='red', fillstyle='right', alpha=alpha)
m.plot(*m(PH[1], PH[0]), marker='o', ms=ms,
       ls='none', mew=1.25,c='green', fillstyle='full', alpha=alpha)
m.plot(*m(SF[1], SF[0]), marker='o', ms=ms,
       ls='none', mew=1.25,c='cyan', fillstyle='left', alpha=alpha,
       markerfacecoloralt='white')

horiz_offset = 0.6  # unit: degrees
plt.text(*m(LA[1] + horiz_offset, LA[0]), 'Los Angeles')
plt.text(*m(LV[1] + horiz_offset, LV[0]), 'Las Vegas')
plt.text(*m(SF[1] + horiz_offset, SF[0]), 'San Francisco')
plt.text(*m(PH[1] + horiz_offset, PH[0]), 'Phoenix')

The markers for Los Angeles and Las Vegas should have been hollow (on the left side for LA, and fully for LV), but they are not. For half-full markers, such as the marker for San Francisco, I can set the markerfacecoloralt to other colors, but not for fully open markers.

  • Operating system: Windows 10
  • Python version: 3.6.6
  • Basemap version: both 1.1.0 and 1.2.0 have this issue
  • matplotlib version: 2.2.2

Note that I used to not have this issue some time ago, with older versions of matplotlib (I don't remember which).

jsh9 avatar Mar 19 '19 22:03 jsh9

most likely, this is an issue with matplotlib rather than basemap itself. I also suspect that this has something to do with the style change work for matplotlib v2.0.

On Tue, Mar 19, 2019 at 6:25 PM Jian Shi [email protected] wrote:

Hello,

When I tried to plot hollow markers on the map, the marker is actually filled, not transparent. See this map below:

[image: image] https://user-images.githubusercontent.com/25124332/54645888-a3f89480-4a5a-11e9-8345-dec0ccb351c1.png

Below is the code to reproduce this map:

import matplotlib.pyplot as pltfrom mpl_toolkits.basemap import Basemap

lon_ll = -124.5 # lower left corner, longitude lon_ur = -105.2 # upper right corner, longitude lat_ll = 32.0 # lower left corner, latitude lat_ur = 42.0 # upper right corner, latitude

f = plt.figure(dpi=100) ax = plt.axes()

m = Basemap(llcrnrlon=lon_ll,llcrnrlat=lat_ll, urcrnrlon=lon_ur,urcrnrlat=lat_ur,
rsphere=(6378137.00,6356752.3142),
resolution='c',projection='merc',
lat_0=(lat_ll+lat_ur)/2,
lon_0=(lon_ll+lon_ur)/2,lat_ts=20., epsg = 3310)

m.arcgisimage(service='World_Physical_Map', xpixels=120, epsg=3310, verbose=False)

m.drawstates() LA = (34.05, -118.25)LV = (36.175, -115.136389)SF = (37.783333, -122.416667)PH = (33.45, -112.066667)

ms = 15 alpha = 0.75

m.plot(*m(LV[1], LV[0]), marker='s', ms=ms, ls='none', mew=1.25,c='blue', fillstyle='none', alpha=alpha) m.plot(*m(LA[1], LA[0]), marker='o', ms=ms, ls='none', mew=1.25,c='red', fillstyle='right', alpha=alpha) m.plot(*m(PH[1], PH[0]), marker='o', ms=ms, ls='none', mew=1.25,c='green', fillstyle='full', alpha=alpha) m.plot(*m(SF[1], SF[0]), marker='o', ms=ms, ls='none', mew=1.25,c='cyan', fillstyle='left', alpha=alpha, markerfacecoloralt='white')

horiz_offset = 0.6 # unit: degrees plt.text(*m(LA[1] + horiz_offset, LA[0]), 'Los Angeles') plt.text(*m(LV[1] + horiz_offset, LV[0]), 'Las Vegas') plt.text(*m(SF[1] + horiz_offset, SF[0]), 'San Francisco') plt.text(*m(PH[1] + horiz_offset, PH[0]), 'Phoenix')

The markers for Los Angeles and Las Vegas should have been hollow (on the left side for LA, and fully for LV), but they are not. For half-full markers, such as the marker for San Francisco, I can set the markerfacecoloralt to other colors, but not for fully open markers.

  • Operating system: Windows 10
  • Python version: 3.6.6
  • Basemap version: both 1.1.0 and 1.2.0 have this issue
  • matplotlib version: 2.2.2

Note that I used to not have this issue some time ago, with older versions of matplotlib (I don't remember which).

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/matplotlib/basemap/issues/455, or mute the thread https://github.com/notifications/unsubscribe-auth/AARy-Ai_7uLKFvfeMdwx7-UdaElM_dV6ks5vYWPegaJpZM4b9Pe4 .

WeatherGod avatar Mar 20 '19 01:03 WeatherGod

I was able to reproduce the result here: https://matplotlib.org/gallery/lines_bars_and_markers/marker_fillstyle_reference.html

For "fill style" equal to "none", the markers are transparent. So it seems that matplotlib is normal.

I am pretty sure the issue didn't come from matplotlib upgrading to v2.0, because when I was able to get proper hollow markers, the matplotlib version I was using was already v2.0+.

Should I open an issue over at matplotlib?

jsh9 avatar Mar 20 '19 02:03 jsh9

As shown in https://github.com/matplotlib/matplotlib/issues/13725 this seems to be an issue in matplotlib 2.2.2, which has been fixed in matplotlib 2.2.3.

ImportanceOfBeingErnest avatar Mar 21 '19 13:03 ImportanceOfBeingErnest