如何使用免费软件制作标量场的散点图?

计算科学 Python 绘图
2021-11-28 00:14:26

如何制作如下所示的散点图,其中点的密度表示该点标量场的大小。例如考虑一个原子的概率密度:

示例图

我设法将这样的东西绘制为彩色图(请参阅我的问题和图片:https ://stackoverflow.com/questions/36113331/pcolormesh-in-polar-coordinates )但我没有找到任何选项像上面这样的散点图。

一个要求是它应该使用 linux 的免费软件来完成。优先:

  • pgfplots 或 pstricks
  • mathplotlib 或其他 python 库

我对 2d 和 3d 中的此类绘图感兴趣。

1个回答

可以简单地从中采样概率密度函数散点图的点。我使用了Psi(X1, X2)您在链接帖子中定义的内容。

可以调整采样点的数量、alpha 和标记类型。轴可以重新归一化为网格网格的尺寸。

交叉引用场的散点图

在下面的代码中,我取输入矩阵的绝对值,因为它具有负值。如果您有正数据和负数据,您可能希望将负值设置为 0,并将不同颜色的散点图添加到同一轴。

import numpy as np
import matplotlib.pylab as plt
def sample(mat, count=10000):
    shape = mat.shape
    magn = np.abs(mat) # input should not be negative
    cumsum = magn.cumsum()

    samples = [None] * count
    for i, rand in enumerate(np.random.random(count) * magn.sum()):
        idx = np.argmax(cumsum > rand)
        samples[i] = (idx % shape[0], idx / shape[1])

    return samples

sample_x, sample_y = zip(*sample(psi(X1,X2)))
plt.figure()
plt.scatter(sample_x, sample_y, alpha=0.25, marker=".")