matplotlib / matplotlib/basemap

contour not closed across 0 meridian in polar projection

Offen
#416 6 Kommentare 0 Reaktionen 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 all,
I'm trying to fetch contour line coordinates from a npaeqd projection plot and I noticed that the contour lines will be broken into 2 parts whenever it crosses the 0-degree longitude, even though they form a closed contour and after calling addcyclic(). Below is minimal working example:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import addcyclic
from mpl_toolkits.basemap import Basemap

lats=np.linspace(0,90,90)
lons=np.linspace(0,360,360)

# make some toy data
xx,yy=np.meshgrid(lons,lats)
z=np.cos(xx*np.pi/180)*np.sin(yy*np.pi/180)

# add cyclic
z,lons=addcyclic(z,lons)
xx,yy=np.meshgrid(lons,lats)

# get contours
bmap=Basemap(projection='npaeqd',boundinglat=0,lon_0=0,
        resolution='l')

fig=plt.figure(figsize=(12,6))
ax1=fig.add_subplot(1,2,1)

contours=bmap.contour(xx,yy,z,[-0.6,0.6],latlon=True,ax=ax1)
bmap.drawcoastlines(ax=ax1)

clines1=contours.collections[0].get_paths()
clines2=contours.collections[1].get_paths()

print 'len(clines1), num of contours across 180', len(clines1)
print 'len(clines2), num of contours across 0', len(clines2)

# plot contours
ax2=fig.add_subplot(1,2,2)

xs=clines1[0].vertices[:,0]
ys=clines1[0].vertices[:,1]
ax2.plot(xs,ys,'b-',label='Contour across 180')

xs=clines2[0].vertices[:,0]
ys=clines2[0].vertices[:,1]
ax2.plot(xs,ys,'r-',label='Half contour across 0')

xs=clines2[1].vertices[:,0]
ys=clines2[1].vertices[:,1]
ax2.plot(xs,ys,'g-',label='Half contour across 0')

ax2.legend()

plt.show(block=False)

Figure output here
The yellow contour on the left are made up by 2 lines (red+green) on the right. This makes it difficult when I try to detect and track some features that move across the 0-meridian.
Is it intended or a bug?

Some specs:
basemap 1.0.7
matplotlib 2.2.2, both installed via conda install

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 mit dem minimalen Beispiel unter Verwendung von addcyclic() und Basemap.contour() in der npaeqd-Projektion und untersuche anschließend, wie Konturenpfade um den 0-Grad-Meridian zurückgegeben werden. Als abgeschlossen gilt, wenn die geschlossene Kontur als ein kontinuierlicher Pfad statt in zwei Teilen zurückgegeben wird, während die Kontur des Beispiels über 180 Grad hinweg korrekt bleibt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
matplotlib, 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
48/100

Neue Issues direkt in Ihr Postfach

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