Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Matplotlib、matshow在fig尺寸为bi时未与gridspec对齐_Python_Matplotlib - Fatal编程技术网

Python Matplotlib、matshow在fig尺寸为bi时未与gridspec对齐

Python Matplotlib、matshow在fig尺寸为bi时未与gridspec对齐,python,matplotlib,Python,Matplotlib,我尝试使用gridspec将多种类型的图绘制在一起。我将它与Jupyter笔记本一起使用,我意识到当图形宽度大于单元格宽度时。垫子缩小了,不再与其他垫子对齐 例如,当figsize的宽度小于单元格宽度时,一切正常 import matplotlib.pyplot as plt import numpy as np import matplotlib.gridspec as grd duration = 1 data1 = np.sin(2*np.pi*np.linspace(0, duratio

我尝试使用gridspec将多种类型的图绘制在一起。我将它与Jupyter笔记本一起使用,我意识到当图形宽度大于单元格宽度时。垫子缩小了,不再与其他垫子对齐

例如,当figsize的宽度小于单元格宽度时,一切正常

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.gridspec as grd
duration = 1
data1 = np.sin(2*np.pi*np.linspace(0, duration, 10000))
data2 = np.random.random((100,12))
fig = plt.figure(figsize=[15, 5], constrained_layout=True)
grid = grd.GridSpec(2, 2, figure=fig, height_ratios=[1, 1], width_ratios=[40, 1])


ax = plt.subplot(grid[0])
ax.plot(data1)

ax = plt.subplot(grid[2])
im = ax.matshow(data2.T, cmap=plt.get_cmap('inferno'), origin='lower')

ax = plt.subplot(grid[3])
cb = plt.colorbar(im, cax=ax)

然后当宽度大于单元格时

fig = plt.figure(figsize=[20, 5], constrained_layout=True)
grid = grd.GridSpec(2, 2, figure=fig, height_ratios=[1, 1], width_ratios=[40, 1])


ax = plt.subplot(grid[0])
ax.plot(data1)

ax = plt.subplot(grid[2])
im = ax.matshow(data2.T, cmap=plt.get_cmap('inferno'), origin='lower')

ax = plt.subplot(grid[3])
cb = plt.colorbar(im, cax=ax)

是什么导致matshow()收缩?我如何修复它?我使用的是带有Matplotlib 3.1.3的Python 3.7

谢谢

我试过你的代码了。
如果您使用plt.show()并最大化窗口:

受约束的\u布局的一个要点是,颜色栏的处理更加优雅。i、 e.你不需要
width\u比率=[40,1]
hack

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots(2, 1, constrained_layout=True)
pc = ax[0].matshow(np.random.rand(20, 20), aspect='auto')
fig.colorbar(pc, ax=ax[0])
ax[1].plot(np.random.rand(20))
plt.show()

您好,我意识到问题在于图形的宽度。我正在使用Jupyter。当宽度大于单元格宽度时,就会出现问题。我重新措辞了这个问题。因此,我认为您不会看到plt.show()和弹出窗口的问题。
matshow
的纵横比是固定的。如果你加宽图形,matshow不一定会变宽,因为它是一个固定的纵横比,高度是约束尺寸。此外,如果你能够使用约束的_布局,你不需要对色条执行gridspec技巧。我通过将matshow的纵横比设置为“自动”解决了这个问题。你能详细说明关于色条的第二点吗?我没有找到另一种解决方案,让matshow与其他绘图对齐,同时让colorbar``导入matplotlib.pyplot作为plt导入numpy作为np fig,ax=plt.subPlot(2,1,constrated_layout=True)pc=ax[0]。matshow(np.random.rand(20,20),aspect='auto')fig.colorbar(pc,ax=ax[0])ax[1]。plt(np.random.rand(20))plt.show()```