使用matplotlib和imshow平滑2D直方图

Ger*_*Ger 6 python numpy matplotlib histogram

我尝试做一个2D直方图,并通过一种插值获得"平滑"的图像.因此,我做了以下组合plt.hist2dplt.imshow

import matplotlib.pyplot as plt
import numpy as np

data = np.loadtxt("parametre_optMC.dat", skiprows=50, usecols=(1,2))

h, x, y, p = plt.hist2d(data[:,0], data[:,1], bins = 20)
plt.imshow(h, origin = "lower", interpolation = "gaussian")
plt.savefig("test.pdf")
Run Code Online (Sandbox Code Playgroud)

正如您在下面的图片中看到的那样,这两个图是叠加的,这是我需要帮助的问题

在此输入图像描述

添加clf有效,但我失去了轴尺寸:

import matplotlib.pyplot as plt
import numpy as np

data = np.loadtxt("parametre_optMC.dat", skiprows=50, usecols=(1,2))

h, x, y, p = plt.hist2d(data[:,0], data[:,1], bins = 20)
plt.clf()
plt.imshow(h, origin = "lower", interpolation = "gaussian")
plt.savefig("test.pdf")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

mwa*_*kom 7

也许最好绘制核密度估计值?

import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt

data = np.random.multivariate_normal([0, 0], [(1, .6), (.6, 1)], 100)
f, ax = plt.subplots(figsize=(7, 7))
sns.kdeplot(data, shade=True, ax=ax)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


ato*_*3ls 1

对于你的第一个问题:

您需要清除以前绘图中的数据,在绘图之前添加以下内容应该可以做到这一点:

plt.clf()
plt.close()
Run Code Online (Sandbox Code Playgroud)

对于你的第二个问题:

要更改轴值,我建议使用该extent参数(请参阅此答案)。

例如:

plt.imshow(h, origin = "lower", interpolation = "gaussian",extent=[-100,100,-75,75])
Run Code Online (Sandbox Code Playgroud)