2

我正在使用这段代码:

fig = plt.figure(num=2, figsize=(8, 8), dpi=80,
                 facecolor='w', edgecolor='k')
x, y = [xy for xy in zip(*self.pulse_time_distance)]
H, xedges, yedges = np.histogram2d(x, y, bins=(25, 25))
extent = [-50, +50, 0, 10]
plt.imshow(H, extent=extent, interpolation='nearest')
plt.colorbar()

但是,要生成 2D 直方图,该图会垂直拉伸,我根本无法弄清楚如何正确设置其大小:

Matplotlib 垂直拉伸二维直方图

4

2 回答 2

4

事情被“拉伸”了,因为你正在使用imshow. 默认情况下,它假定您要显示绘图的纵横比为 1(在数据坐标中)的图像。

如果您想禁用此行为,并让像素拉伸以填满绘图,只需指定aspect="auto".

例如,重现您的问题(基于您的代码片段):

import matplotlib.pyplot as plt
import numpy as np

# Generate some data
x, y = np.random.random((2, 500))
x *= 10

# Make a 2D histogram
H, xedges, yedges = np.histogram2d(x, y, bins=(25, 25))

# Plot the results
fig, ax = plt.subplots(figsize=(8, 8), dpi=80, facecolor='w', edgecolor='k')

extent = [-50, +50, 0, 10]
im = ax.imshow(H, extent=extent, interpolation='nearest')
fig.colorbar(im)

plt.show()

在此处输入图像描述

我们可以通过添加调用aspect="auto"来修复它:imshow

import matplotlib.pyplot as plt
import numpy as np

# Generate some data
x, y = np.random.random((2, 500))
x *= 10

# Make a 2D histogram
H, xedges, yedges = np.histogram2d(x, y, bins=(25, 25))

# Plot the results
fig, ax = plt.subplots(figsize=(8, 8), dpi=80, facecolor='w', edgecolor='k')

extent = [-50, +50, 0, 10]
im = ax.imshow(H, extent=extent, interpolation='nearest', aspect='auto')
fig.colorbar(im)

plt.show()

在此处输入图像描述

于 2013-06-04T13:03:12.850 回答
2

不确定,但我认为您应该尝试修改 historgram2d :

H, xedges, yedges = np.histogram2d(x, y, bins=(25, 25), range=[[-50, 50], [0, 10]])

编辑: 我没有找到如何准确修复比率,但是使用 aspect='auto',matplotlib 猜对了:

plt.imshow(hist.T, extent=extent, interpolation='nearest', aspect='auto')
于 2013-06-04T12:45:55.133 回答