Python pcolormesh添加空的白色列

Python pcolormesh添加空的白色列,python,matplotlib,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.arr

我一直在尝试用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()
但是,如果我尝试使用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()
我在末尾看到了那些奇怪的白色柱子。这似乎适用于几个值(10x11失败,但10x12工作…我无法识别模式)。


有没有办法去除它们,或者强制设定热图的最终尺寸?

在轴限制和纵横比方面,
pcolormesh
的行为不像图像,更像是一个线图。如果你想将数组的元素显示为像素,你可以使用
imshow
。或者,你可以设置
p的x限制CurrimeS/<代码>情节。考虑下面的例子:

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)
这给了我们:


非常感谢,imshow的问题(我以前使用过),就是你不能将数字保存为漂亮的矢量图形。地图中的颜色总是很模糊。@Zenon-hmm。我从来没有遇到过这个问题。你调用
savefig
,是否将dpi设置得足够高?你也可以搞乱它的插值选项。我尝试过,但设置得足够大(比如800),对于大型图形(10k x 10k行),文件大小变得非常可笑。因此,pcolormesh提供的矢量图像选项似乎非常完美。@Zenon理解。我建议设置轴限制(和纵横比)在这种情况下是显式的。我将修改示例,以演示如何更优雅地执行此操作。@PaulH-或者,您可以调用
ax.axis('tight')
来自动将轴限制设置为数据的边界,而不是手动指定它们。