如何在摩尔维德投影上绘制坐标热图

How to plot a heatmap of coordinates on a mollweide projection

我有一组纬度和经度坐标(即列表列表:[[20,24],[100,-3],...]),我想在 mollweide 投影上绘制热图(不仅仅是散点图)。本质上,我想要的是一个 seaborn hist2d 情节,但作为一个 mollweide。有关我的意思的参考,请参阅上传的图片。有谁知道如何做到这一点?

我创建了一些随机数据并展示了生成直方图的方法。我希望这是你正在寻找的东西。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

# create some random data for histogram
base = [[-20, 30], [100, -20]]
data = []
for _ in range(10000):
    data.append((
        base[0][0] + np.random.normal(0, 20),
        base[0][1] + np.random.normal(0, 10)
    ))
    data.append((
        base[1][0] + np.random.normal(0, 20),
        base[1][1] + np.random.normal(0, 10)
    ))
data = np.array(data) / 180 * np.pi  # shape (n, 2)

# create bin edges
bin_number = 40
lon_edges = np.linspace(-np.pi, np.pi, bin_number + 1)
lat_edges = np.linspace(-np.pi/2., np.pi/2., bin_number + 1)

# calculate 2D histogram, the shape of hist is (bin_number, bin_number)
hist, lon_edges, lat_edges = np.histogram2d(
    *data.T, bins=[lon_edges, lat_edges], density=True
)

# generate the plot
cmap = plt.cm.Greens

fig = plt.figure()
ax = fig.add_subplot(111, projection='mollweide')

ax.pcolor(
    lon_edges[:-1], lat_edges[:-1],
    hist.T,  # transpose from (row, column) to (x, y)
    cmap=cmap, shading='auto',
    vmin=0, vmax=1
)

# hide the tick labels
ax.set_xticks([])
ax.set_yticks([])

# add the colorbar
cbar = plt.colorbar(
        plt.cm.ScalarMappable(
            norm=mpl.colors.Normalize(0, 1), cmap=cmap
        )
    )
cbar.set_label("Density Distribution")

plt.show()

得到下图