如何在 Python 中将多个直方图堆叠在一个图中?
How to stack multiple histograms in a single figure in Python?
我有一个形状为 [30, 10000] 的 numpy 数组,其中第一个轴是时间步长,第二个轴包含对一系列 10000 个变量观察到的值。我想在一个图中可视化数据,类似于:
您可以在 seaborn 教程中找到 here。基本上,我想要的是为 30 个时间步骤中的每一个绘制一个 30/40 分箱的直方图,然后 - 以某种方式 - 将这些直方图连接成一个公共轴并将它们绘制在同一个图中。
我的数据看起来像一个随时间移动并变宽的高斯分布。您可以使用以下代码重现类似的内容:
mean = 0.0
std = 1.0
data = []
for t in range(30):
mean = mean + 0.01
std = std + 0.1
data.append(np.random.normal(loc=mean, scale=std, size=[10000]))
data = np.array(data)
最好能有与上图相似的图,如有帮助将不胜感激!
谢谢,
G.
使用直方图?你可以用 np.hist2d 来做,但是这种方式更清晰一些...
import matplotlib.pyplot as plt
import numpy as np
data = np.random.randn(30, 10000)
H = np.zeros((30, 40))
bins = np.linspace(-3, 3, 41)
for i in range(30):
H[i, :], _ = np.histogram(data[i, :], bins)
fig, ax = plt.subplots()
times = np.arange(30) * 0.1
pc = ax.pcolormesh(bins, times, H)
ax.set_xlabel('data bins')
ax.set_ylabel('time [s]')
fig.colorbar(pc, label='count')
我有一个形状为 [30, 10000] 的 numpy 数组,其中第一个轴是时间步长,第二个轴包含对一系列 10000 个变量观察到的值。我想在一个图中可视化数据,类似于:
您可以在 seaborn 教程中找到 here。基本上,我想要的是为 30 个时间步骤中的每一个绘制一个 30/40 分箱的直方图,然后 - 以某种方式 - 将这些直方图连接成一个公共轴并将它们绘制在同一个图中。
我的数据看起来像一个随时间移动并变宽的高斯分布。您可以使用以下代码重现类似的内容:
mean = 0.0
std = 1.0
data = []
for t in range(30):
mean = mean + 0.01
std = std + 0.1
data.append(np.random.normal(loc=mean, scale=std, size=[10000]))
data = np.array(data)
最好能有与上图相似的图,如有帮助将不胜感激!
谢谢, G.
使用直方图?你可以用 np.hist2d 来做,但是这种方式更清晰一些...
import matplotlib.pyplot as plt
import numpy as np
data = np.random.randn(30, 10000)
H = np.zeros((30, 40))
bins = np.linspace(-3, 3, 41)
for i in range(30):
H[i, :], _ = np.histogram(data[i, :], bins)
fig, ax = plt.subplots()
times = np.arange(30) * 0.1
pc = ax.pcolormesh(bins, times, H)
ax.set_xlabel('data bins')
ax.set_ylabel('time [s]')
fig.colorbar(pc, label='count')