matplotlib / basemap

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

basemap plot the opposite longitudinal section #359

Open Xunius opened 7 years ago

Xunius commented 7 years ago

I'm getting nothing from stackoverflow so I post it here.

The problem is I can't let bluemarble to plot a map showing the Indo-Pacific longitudinal section, covering the longitude band of about [60,190]. Below is my code:

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

lats=[-25,66]
lons=[60,187]

fig=plt.figure();ax=fig.add_subplot(111)

bmap=Basemap(projection='merc',\
        llcrnrlat=lats[0],llcrnrlon=lons[0],\
        urcrnrlat=lats[1],urcrnrlon=lons[1]-360.,\
        lon_0=(lons[0]+lons[1])/2.,\
        ax=ax)

bmap.bluemarble()
plt.show()

The result has its x-axis flipped, I guess somehow related to this issue#192

If I swap the llcrnrlon and urcrnrlon:

bmap=Basemap(projection='merc',\
        llcrnrlat=lats[0],llcrnrlon=lons[1]-360.,\
        urcrnrlat=lats[1],urcrnrlon=lons[0],\
        lon_0=(lons[0]+lons[1])/2.,\
        ax=ax)

the map shows correct orientation, but the wrong domain. I wanted to show the Indian ocean, Euro-asia and west Pacific, however the map shows the remaining longitudes, covering the central-east Pacific, America continents and Atlantic. The lon_0 argument doesn't seem to do anything.

I am aware that when crossing the dateline things get complicated and sometimes you need to shiftgrid() or shiftdata(), but in this case I have no data yet, just the bluemarble background.

Please help.

Some versions (all in conda with python2.7): basemap=1.0.7=np111py27_0 matplotlib=2.0.0=np111py27_0

Xunius commented 7 years ago

I got a reply on stackoverflow providing a workaround which is to plot 2 separate bluemarbles joining at the dateline. It solved my problem, but still I would consider this as a bug, the dateline issue is haunting basemap for so long.