2015-02-28 5 views
0

Именно так говорится в заголовке. Я черчение данных о концентрации морского льда и этот код:Изменение проекции базовой карты приводит к исчезновению данных

map = Basemap(projection='cyl', lat_0 = lat_0, lon_0 = lon_0, 
      llcrnrlon = llcrnrlon, llcrnrlat = llcrnrlat, 
      urcrnrlat = urcrnrlat, urcrnrlon = urcrnrlon, 
      area_thresh = 1000., resolution='l') 

работает просто отлично. http://i.imgur.com/8i36gn0.png

Но когда я пытаюсь изменить проекцию:

map = Basemap(projection='npstere',boundinglat=10,lon_0=270,resolution='l') 

Я просто получаю пустую карту. http://i.imgur.com/5TazZdC.png

Я что-то забыл о базовой карте? Я, хотя изменение проекции было довольно простым.

Edit: Heres полный код

import numpy as np 
import math as m 
import urllib2 
import time 
import datetime 
import matplotlib.pyplot as plt 
import matplotlib.patheffects as path_effects 
from matplotlib.colors import LinearSegmentedColormap 
from mpl_toolkits.basemap import Basemap 
from pydap.client import open_url 
from pydap.proxy import ArrayProxy 
import scipy 
from scipy.ndimage.filters import minimum_filter, maximum_filter 

data_url_ice = 'http://www.esrl.noaa.gov/psd/thredds/dodsC/Datasets/noaa.oisst.v2.highres/icec.day.mean.2015.v2.nc' 

dataset3 = open_url(data_url_ice) 

############################################################################################# 
# Get Data 
############################################################################################# 

# Daily Mean Ice Concentration 

Lat_ice = dataset3['lat'] 
Lon_ice = dataset3['lon'] 
Time_ice = dataset3['time'] 
Ice_Conc = dataset3['icec'] 
Ice_Conc = Ice_Conc[-1,:,:] 
Ice_Conc = Ice_Conc.array[:] 

Ice_Conc[Ice_Conc < 0] = 0 
Ice_Conc = Ice_Conc * 100. 

Ice_Conc = Ice_Conc.squeeze() 

############################################################################################# 
# Colormap 
############################################################################################# 

vmax_ice = 100.0 
cmap_ice = LinearSegmentedColormap.from_list('mycmap', [(0 /vmax_ice, 'white'), #-40 
                 (50. /vmax_ice, 'yellow'), #-20 
                 (100. /vmax_ice, 'blue')] # 20 
              ) 

############################################################################################# 
# Map Projection Info 
############################################################################################# 

lat_0 = 0 
lon_0 = 0 

llcrnrlat = -90. # (1,1) 
llcrnrlon = 0. # (1,1) 

urcrnrlat = 90. # (720,361) 
urcrnrlon = 359. # (720,361) 

# Daily Mean Ice Concentration 

fig = plt.figure(figsize=(14,14)) 
ax = fig.add_subplot(1,1,1) 
#map = Basemap(projection='ortho', lat_0 = 50, lon_0 = -105, 
#    area_thresh = 1000., resolution='i') 

map = Basemap(projection='npstere',boundinglat=10,lon_0=270,resolution='l') 

#map = Basemap(projection='cyl', lat_0 = lat_0, lon_0 = lon_0, 
#    llcrnrlon = llcrnrlon, llcrnrlat = llcrnrlat, 
#    urcrnrlat = urcrnrlat, urcrnrlon = urcrnrlon, 
#    area_thresh = 1000., resolution='l') 

map.drawcoastlines() 
map.drawcountries() 
map.drawmapboundary() 
map.fillcontinents(color='white') 

levels = np.linspace(0,100,100) 
ticks = [0,10,20,30,40,50,60,70,80,90,100] 
iceconc = plt.contourf(Lon_ice,Lat_ice,Ice_Conc,levels,cmap=cmap_ice) 

# Set Colorbar Text Color 
color_bar = map.colorbar(iceconc) 
color_bar.set_ticks(ticks) 
cbytick_obj = plt.getp(color_bar.ax.axes, 'yticklabels') 
plt.setp(cbytick_obj, color='w') 

ax.text(0,1.02,'Sea Ice Concentration (%)\n\n', 
     verticalalignment='bottom', horizontalalignment='left', 
     transform=ax.transAxes, color='w', fontsize=9).set_clip_on(False) 
ax.text(0,1.02,'Satellite Measured Daily Mean\n', 
     verticalalignment='bottom', horizontalalignment='left', 
     transform=ax.transAxes, color='w', fontsize=9).set_clip_on(False)   

plt.savefig('/home/ice_current.png', facecolor='#3e3e3e', bbox_inches='tight') 
plt.close("all") 
+0

Вы делаете это в командной строке? или через скрипт? Как вы помещаете свои данные на карту? – dloman

+0

сценарий. Я просто добавил полный код. – pythonismyjam

ответ

2

Я думаю, что вы забываете простейшую линию, однако вы не показали большую часть вашего кода, так что трудно угадать. т.е.

map = Basemap(projection='cyl', lat_0 = lat_0, lon_0 = lon_0, 
      llcrnrlon = llcrnrlon, llcrnrlat = llcrnrlat, 
      urcrnrlat = urcrnrlat, urcrnrlon = urcrnrlon, 
      area_thresh = 1000., resolution='l') 

#valid aproximate coordinates for some map projections 
lat = [19.2325] 
lon = [-155.3395] 

#but the actual map coordinates are 
x,y = map(lat, lon) 
map.plot(x, y, 'ro', markersize=6) 

Я считаю, что ваши данные по-прежнему существует, но не были преобразованы в proper map coordinates. Обратите внимание, как в примере они используют m, ваш экземпляр Basemap имеет имя map в вашем примере, поэтому используйте его. Я думаю, что это здорово, как они это сделали.

+0

О, я чувствую себя глупым. Мне просто нужно было добавить meshgrid и отобразить его. благодаря – pythonismyjam

Смежные вопросы