pcolormesh添加空白列

Zen*_*non 4 python matplotlib

我一直试图用pcolormesh做一个简单的热图,我遇到了一些奇怪的效果,有些尺寸,它们会添加空的白色列.如果我创建一个10x30,如下所示,它完美地工作.

from matplotlib import pyplot as plt 
import numpy as np

d = []
for x in range(10):
    d.append([])
    for y in range(30):
        d[-1].append(y)

plt.pcolormesh(np.array(d))
plt.show()
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试使用10x37:

from matplotlib import pyplot as plt 
import numpy as np

d = []
for x in range(10):
    d.append([])
    for y in range(34):
        d[-1].append(y)

plt.pcolormesh(np.array(d))
plt.show()
Run Code Online (Sandbox Code Playgroud)

我最后得到了那些奇怪的白色柱子.这似乎适用于几个值(10x11失败,但10x12工作......我无法分辨模式. 10x37的结果

有没有办法删除它们,可能强制热图的最终大小?

Pau*_*l H 5

在轴限制和纵横比方面,pcolormesh行为不像图像,更像是线图.如果要将数组的元素显示为像素,则可以使用imshow.或者,您可以设置pcolormesh绘图的x限制.请考虑以下示例:

from matplotlib import pyplot as plt 
import numpy as np

d1 = []
d2 = []
for x in range(10):
    d1.append([])
    d2.append([])
    for y in range(30):
        d1[-1].append(y+x)

    for y in range(37):
        d2[-1].append(y+x)



fig, axes = plt.subplots(ncols=4, figsize=(10,4))

# your first two examples
axes[0].pcolormesh(np.array(d1), cmap=plt.cm.coolwarm)
axes[1].pcolormesh(np.array(d2), cmap=plt.cm.coolwarm)

# let's reset the x-lims on this
axes[2].pcolormesh(np.array(d2), cmap=plt.cm.coolwarm)
axes[2].set_ylim(bottom=0, top=d2.shape[0])
axes[2].set_xlim(left=0, right=d2.shape[1])
# or more concisely (thanks Joe): 
axes[2].axis('tight')

# and use imshow here
axes[3].imshow(np.array(d2), cmap=plt.cm.coolwarm)
Run Code Online (Sandbox Code Playgroud)

这给了我们:

在此输入图像描述

  • @PaulH - 或者你可以调用`ax.axis('tight'')来自动将轴限制设置为数据的边界,而不是手动指定它们. (4认同)