python - Matplotlib/ basemap : Plot a globe in the center of a plot

标签 python matplotlib matplotlib-basemap

我试图在 python 中弄清楚如何使用 basemap 来制作这样的图:

enter image description here

重点关注左上图,这是每个箱中密度的二维直方图,中间覆盖有图形地球。

我遇到的一个大问题是 basemap 似乎不能很好地作为重叠图。我可以传入轴,但它似乎接管了这些轴并且表现不佳。如果能够使用 basemap bluemarble 界面获得一个非常酷的地球,具有正确的阴影以及当前的日期、时间和视角,我真的会很棒。

在我的例子中,我正在极地绘制二维等高线图(或者使用 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')

正如您所看到的, basemap 完全占据了轴,并且首先绘制的图根本看不到。

enter image description here

最佳答案

您可以尝试以下操作:

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')

最后,使用 basemap 的地球:

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

技巧是使用 add_axes 方法将辅助轴 (ax2) 放置在中心。 您可以使用轴限制来获取您需要的数字。希望能帮助到你。 Example image of the code

关于python - Matplotlib/ basemap : Plot a globe in the center of a plot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41211985/

相关文章:

python - 在 matplotlib 中绘制一个散点图,x 轴为日期,y 轴为值

matplotlib - 在自定义投影上绘制自然地球特征

python - 在散点图中,我想自动填充轴

python - 将顶部 x 轴标签放在图表内部

python - 带有彩色箭袋的颜色图

python - 绘制故障线而不将每条线连接在一起

python - arcgisimage、 basemap python 的更好文档

python - 是否可以在 Python 的实例级别覆盖 __getitem__?

python - 如何从 Pandas 数据框中的时间戳列中删除时区

python - 同一包中的绝对导入模块