Python Matplotlib/basemap:在绘图中心绘制地球仪

Python Matplotlib/basemap:在绘图中心绘制地球仪,python,matplotlib,matplotlib-basemap,Python,Matplotlib,Matplotlib Basemap,我试图在python中找出如何使用basemap来绘制如下图: 聚焦于左上角的图,这是每个箱子中密度的2d直方图,中间覆盖着一个图形地球 我面临的一个大问题是,basemap似乎不能很好地发挥它的作用。我可以通过斧头,但它似乎接管了这些斧头,表现不好。如果我能够使用basemap bluemarble界面获得一个具有正确底纹的非常酷的地球,以及当前日期、时间和视点,那将是非常棒的 在我的例子中,我正在用polar绘制二维等高线图(或者用bar获得看起来很棒的小曲线框),并希望放置一个半径为1的

我试图在python中找出如何使用basemap来绘制如下图:

聚焦于左上角的图,这是每个箱子中密度的2d直方图,中间覆盖着一个图形地球

我面临的一个大问题是,basemap似乎不能很好地发挥它的作用。我可以通过斧头,但它似乎接管了这些斧头,表现不好。如果我能够使用basemap bluemarble界面获得一个具有正确底纹的非常酷的地球,以及当前日期、时间和视点,那将是非常棒的

在我的例子中,我正在用polar绘制二维等高线图(或者用bar获得看起来很棒的小曲线框),并希望放置一个半径为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')
正如你所看到的,底图完全占据了轴线,而首先绘制的图在哪里都看不见


您可以尝试以下方法:

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)放置在中心。 您可以使用轴限制来获得所需的数字。希望能有帮助。 或切换到Carto

%matplotlib内联
将cartopy.crs作为CCR导入
将matplotlib.pyplot作为plt导入
ax=plt.轴(投影=ccrs.PlateCarree())
ax.库存量
ny_lon,ny_lat=-75,43
德里岛,德里岛=77.23,28.61
plt.text(纽约州-3,纽约州-12,'纽约',
水平对齐='右',
transform=ccrs.Geodetic())
plt.text(德里+3,德里-12,‘德里’,
水平对齐='左',
transform=ccrs.Geodetic())
plt.show()

你能提供一些示例代码吗?包括一个非常简单的示例这是一个正方形的绘图。。。根本不是问题。我想建议有一个更好的映射机制,whist使用Python。而不是解决您的问题-因为我永远无法在Python3.7上安装Basemap。