气泡图加权二维散点图数据到 mesh/grid

Bubble-plot weighted 2d scatter plot data onto mesh/grid

背景

我有一组二维的“原始”数据点,以数组的形式,即:

[[0, 0, 1, 0, 0],
 [0, 1, 2, 1, 0],
 [1, 2, 4, 2, 1],
 [0, 1, 2, 1, 0],
 [0, 0, 1, 0, 0]]

数据表示二维的圆形“质量分布”图 space。 x-y坐标表示数据点的x-y分布,每个x-y坐标处的值就是该数据点测得的mass/intensity。

我想绘制此数据,仅使用 Python、 (only at the integral x-y intersections),如下图所示,但使用我自己的 x-y散点图数据,而不是绘制 2D line/function.

此外,我想结合 "specify dot size" logic from another SO question,它允许我在“per-sample/value”的基础上指定点大小,即:


问题

如何组合上述逻辑来呈现数据集,如下所示:

[[0, 0, 1, 0, 0],
 [0, 1, 2, 1, 0],
 [1, 2, 4, 2, 1],
 [0, 1, 2, 1, 0],
 [0, 0, 1, 0, 0]]

像这样,通过matplotlib/pyplot(离散域、离散范围、连续值):


额外

How can I re-use the above data set to generate a heatmap of the same data (i.e. continuous-domain, continuous-range, continuous valued)?

或者,更像这样:

您可以先创建一个 meshgrid 来定义您的 x 和 y 坐标,然后使用 data 数组来定义您的点的大小。 0 的条目将不会显示,因为大小为 0。我使用 100 的缩放因子来放大点。

完整的工作代码:


import numpy as np
import matplotlib.pyplot as plt

data = np.array([[0, 0, 1, 0, 0],
 [0, 1, 2, 1, 0],
 [1, 2, 4, 2, 1],
 [0, 1, 2, 1, 0],
 [0, 0, 1, 0, 0]])

mesh = np.arange(len(data))
x, y = np.meshgrid(mesh, mesh)
plt.scatter(x, y, s=data*100)
plt.xticks(range(len(data))) # To put ticks at integer values
plt.yticks(range(len(data))) # To put ticks at integer values
plt.show()

生成热图

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

# data here

x, y = np.meshgrid(np.arange(len(data)), np.arange(len(data)))
plt.scatter(x, y, s=data*100, c=data, cmap=cm.Oranges)
plt.xticks(range(len(data)))
plt.yticks(range(len(data)))