matplotlib / matplotlib/basemap

South Polar Stereographic Projection not producing right plot

Offen
#350 2 Kommentare 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Vorherrschende Sprache
Python
Sterne
817
Forks
395
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

Hi,

This may be a followup of a previous closed issue (https://github.com/matplotlib/basemap/issues/118).
I am making polar stereographic projection pcolormesh plots of some sea ice data. It works fine with the Northern Hemisphere, but produces solid color for the South.
The problem was replicated on both Linux and Windows with different versions of Python, numpy, matplotlib and basemap. I am using basemap-1.1.0 with matplotlib-1.5.3 in winpython-3.5 on Windows 10 to produced the following figures.
Here is an example script:

from netCDF4 import Dataset
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import array
import matplotlib.cm as cm
from mpl_toolkits.basemap import Basemap
import glob
import struct
import datetime
import time
import sys
from pylab import *


POLE=sys.argv[3]
fname=sys.argv[1]
fld=sys.argv[2]
print(fname)
ncfile = Dataset(fname, 'r', format='NETCDF4')
fbot=ncfile.variables[fld][0]
if 'lon' in ncfile.variables:
    LON=ncfile.variables['lon'][:]
if 'lon_scaler' in ncfile.variables:
    LON=ncfile.variables['lon_scaler'][:]    
if 'LON' in ncfile.variables:
    LON=ncfile.variables['LON'][:]
if 'lat' in ncfile.variables:
    LAT=ncfile.variables['lat'][:]
if 'lat_scaler' in ncfile.variables:
    LAT=ncfile.variables['lat_scaler'][:]    
if 'LAT' in ncfile.variables:
    LAT=ncfile.variables['LAT'][:]
if 'kmt' in ncfile.variables:
    kmt=ncfile.variables['kmt'][:]

lon=LON
lat=LAT
    
if len(LON.shape) == 1:
    lon,lat=np.meshgrid(LON,LAT)

if 'kmt' in ncfile.variables:
    fbot=ma.masked_where(kmt<1, fbot)
    
ncfile.close()

meridians=[1,0,1,1]

fig=figure(figsize=(12,12), facecolor='w')

if  POLE=='N':
    m = Basemap(projection='npstere',lon_0=0,boundinglat=45)
if  POLE=='S':
    m = Basemap(projection='spstere',lon_0=180,boundinglat=-45)
m.drawcoastlines()
m.fillcontinents()
m.drawcountries()
plt.title(fld)
x, y =m(lon,lat)
m.pcolormesh(x,y,fbot,vmin=float(sys.argv[4]), vmax=float(sys.argv[5]))
m.drawparallels(np.arange(-90.,120.,15.),labels=[1,0,0,0]) # draw parallels
m.drawmeridians(np.arange(0.,420.,30.),labels=meridians) # draw meridians
plt.colorbar(orientation='vertical',extend='both',shrink=0.8)
plt.show()

A netcdf file to reproduce the problem can be downloaded here

ftp://pscftp.apl.washington.edu/zhang/Global_seaice/heff.H1987.nc.gz

Once untared, the following call to the above script (named plot_field_pole.py)

python plot_field_pole.py heff.H1987.nc heff S 0.0 3.0

will give the wrong plot.

ice_sh

while

python plot_field_pole.py heff.H1987.nc heff N 0.0 3.0

produced correct one.
ice_nh

The only difference between the two commands is Basemap(projection='spstere') or
Basemap(projection='npstere')

Any help will be much appreciated.

Bin Zhao

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne damit, plot_field_pole.py mit heff.H1987.nc sowohl für das S- als auch für das N-Argument auszuführen, wie im Issue beschrieben. Vergleiche die Basemap-Pfade spstere und npstere und konzentriere dich dabei auf das Ergebnis von pcolormesh. Als erledigt gilt die Aufgabe, wenn die South Polar Stereographic projection einen korrekt eingefärbten Plot statt eines einfarbigen Plots erzeugt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
data-visualization
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.