matplotlib / basemap

Plot on map projections (with coastlines and political boundaries) using matplotlib
MIT License
779 stars 392 forks source link

nightshade() on Robinson Projection and lon_0=-180 #610

Open domdabomb opened 5 days ago

domdabomb commented 5 days ago

Hello! I'm plotting day/night shading on a Robinson projection centered at -180 degrees with nightshade(), and as you can see, the shading doesn't look right. I'm also getting a warning about a non-monotonically increasing x coordinate. Presumably, nightshade() is plotting a transparent contour under the hood, but I couldn't see a way to change the starting longitude in the documentation. I'm not familiar enough with Basemap to know if this is a bug or if I'm missing something. Any suggestions would be greatly appreciated!

Plot test

Warning

WARNING: x coordinate not montonically increasing - contour plot may not be what you expect. If it looks odd, your can either adjust the map projection region to be consistent with your data, or (if your data is on a global lat/lon grid) use the shiftgrid function to adjust the data to be consistent with the map projection region (see examples/contour_demo.py).

Code for reproduction

from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt
from datetime import datetime
# lon_0 is central longitude of projection.
# resolution = 'c' means use crude resolution coastlines.
m = Basemap(projection='robin',lon_0=-180,resolution='c')
m.drawcoastlines()
m.fillcontinents(color='coral',lake_color='aqua')
# draw parallels and meridians.
m.drawparallels(np.arange(-90.,120.,30.))
m.drawmeridians(np.arange(0.,360.,60.))
m.drawmapboundary(fill_color='aqua')
date = datetime(2024,10,10,6)
m.nightshade(date,alpha=0.2)
plt.title("Robinson Projection")
plt.savefig('test.png')

Environment Ubuntu and RHEL Python 3.8.13

Please let me know if I should be providing more details

molinav commented 5 days ago

Hi, @domdabomb! Which basemap version are you using to reproduce the issue? Can you provide a list of the packages in your environment? Is basemap installed from the system repositories, from PyPI, from miniforge, or directly built from the source code?

domdabomb commented 5 days ago

Hi @molinav. I think I installed Basemap from PyPI. Here's what conda list | grep basemap returns:

basemap 1.3.8 pypi_0 pypi basemap-data 1.3.2 pypi_0 pypi

I'm attaching the output of conda env export > conda_env.txt here: conda_env.txt

Is this the info you need? Thanks!