2017-07-11 12 views
0

Ich versuche ein Contour Plot mit der Global Map im Hintergrund zu erstellen. Da meine Daten LON- und LAT-Werte haben, entschied ich mich, Cartopy mit MatplotLib zu verwenden.Cartopy + Matplotlib (contourf) - Map Überschreibende Daten

Das Problem ist, dass ich meine Daten und die Karte perfekt getrennt darstellen kann, aber wenn ich versuche, die Daten mit der Karte zu integrieren, überschreibt die Cartopy-Karte mein Diagramm.

Dies ist mein Code:

ax = plt.axes(projection=cartopy.crs.PlateCarree()) 

v = np.linspace(0, 80, 25, endpoint=True) 
cp = plt.contourf(matrixLon, matrixLat, matrixTec, v, transform=cartopy.crs.PlateCarree()) 
plt.colorbar(cp) 

ax.add_feature(cartopy.feature.LAND) 
ax.add_feature(cartopy.feature.OCEAN) 
ax.add_feature(cartopy.feature.COASTLINE) 
ax.add_feature(cartopy.feature.BORDERS, linestyle=':') 
ax.set_extent([-85, -30, -60, 15]) 

plt.title('TEC Map') 
plt.show() 

Plots:

Plotting only Data

Plotting only the map

Es ist seltsam, weil ich denke, dass die logischen Daten ist die Karte außer Kraft setzen (und vielleicht Ich muss eine transparente Farbskala ausprobieren), aber nicht umgekehrt.

Kann mir jemand bei diesem Problem helfen?

Antwort

1

Hier ist der Arbeitscode, den Sie ausprobieren können.

import matplotlib.pyplot as plt 
#import cartopy.crs as ccrs 
import numpy as np 
import cartopy 

# prep some data for contourf plot 
# extents: upper-right of the map 
x = np.linspace(-65, -30, 30) 
y = np.linspace(-30, 15, 30) 
matrixLon, matrixLat = np.meshgrid(x, y) 
matrixTec = 10*np.sin(matrixLon**2 + matrixLat**2)/(matrixLon**2 + matrixLat**2) 

ax = plt.axes(projection=cartopy.crs.PlateCarree()) 

# prep increasing values of v covering values of Z (matrixTec) 
v = np.arange(-0.15, 0.15, 0.025) 

# plot with appropriate parameters 
# zorder: put the filled-contour on top 
# alpha: set transparency to allow some visibility of graphics below 
cp = plt.contourf(matrixLon, matrixLat, matrixTec, v, \ 
        transform=cartopy.crs.PlateCarree(), \ 
        zorder=2, \ 
        alpha=0.65, \ 
        cmap=plt.cm.copper) 
plt.colorbar(cp) 

ax.add_feature(cartopy.feature.LAND) 
ax.add_feature(cartopy.feature.OCEAN) 
ax.add_feature(cartopy.feature.COASTLINE) 
ax.add_feature(cartopy.feature.BORDERS, linestyle=':') 
ax.set_extent([-85, -30, -60, 15]) 

plt.title('TEC Map') 
plt.show() 

Das Wesentliche ist die Verwendung von zorder und alpha in plt.contourf(), die eingestellt werden können, um zu zeigen, oder einige Funktionen auf der Karte zu verbergen.

enter image description here

+0

Vielen Dank für Ihre Antwort, swatchai. Erklärt und geholfen, mein Problem zu lösen! :) – Hollweg

+0

@Hollweg die richtige Art zu sagen, danke gibt eine + Stimme und klicken Sie, um meine Antwort zu akzeptieren. :) – swatchai