2016-12-18 5 views
2

Я пытаюсь в питона понять, как использовать базовую карту, чтобы участки, как это:Matplotlib/Базовая карта: Участок земной шар в центре сюжета

enter image description here

Сосредоточение на верхнем левом участке, это 2-я гистограмма плотности в каждом ящике с графической землей, наложенной в центре.

Большая проблема, с которой я сталкиваюсь, заключается в том, что базовая карта, похоже, не выглядит красиво, как надстройка. Я могу передавать топоры, но, похоже, они захватывают эти топоры и не ведут себя хорошо. Я был бы действительно потрясающе, чтобы иметь возможность использовать базовый интерфейс bluemarble, чтобы получить действительно крутую перспективную Землю с правильным затенением и все для текущей даты и времени и точки зрения.

В моем случае я делаю 2d контурные графики в полярных (или с помощью бар, чтобы получить маленькие изогнутые коробки, которые выглядят большими) и хотите разместить землю, охватывающих к радиусу 1.

Вот еще простой пример от того, что не работает.

import matplotlib.pyplot as plt 
import basemap 
from mpl_toolkits.basemap import Basemap 
plt.plot(range(-10,10)) 
ax = plt.gca() 
map = Basemap(projection='ortho',lat_0=45,lon_0=-100,resolution='l', ax=ax) 
map.fillcontinents(color='coral',lake_color='aqua') 

Как вы можете видеть, базовая карта полностью захватила ось, и первый график был не там, где нужно было видеть.

enter image description here

+0

Можете вставить код примера? –

+0

Включенный действительно простой пример –

ответ

2

Вы можете попробовать следующее:

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

fig=plt.figure() 
ax=fig.add_axes([.1,.1,.8,.8],polar=True) # This is the background axis 

# variables for the background plot. I use some random numbers just for 
# illustration purposes 
N = 150 
r = (1 - 0.8) * np.random.random_sample(N) +0.8 
theta = 2*np.pi*np.random.random(N) 
area = 200*r**2*np.random.random(N) 

ax.scatter(theta, r, c=theta, s=area, cmap='hsv') 

Этот участок должен быть затем соответствующим образом отформатированы, в данном случае, с прозрачностью и без оси информации:

plt.setp(ax.get_xticklabels(),visible=False) 
plt.setp(ax.get_yticklabels(),visible=False) 
ax.patch.set_visible(False) 
ax.grid(False) 
ax.axis('off') 

И наконец, земной шар с использованием базовой карты:

ax2=fig.add_axes([.3,.3,.4,.4]) 
m = Basemap(projection='ortho',lon_0=-105,lat_0=-25,resolution='l',ax=ax2) 
m.bluemarble(scale=.1) # scale=.1 for low resolution 

Трюк состоит в том, чтобы поместить вторичную ось (ax2) в центр с помощью метода add_axes. Вы можете играть с ограничениями по осям, чтобы получить нужный вам номер. Надеюсь, поможет. Example image of the code

+0

Фантастический, спасибо! –