我正在尝试使用宽高比1来绘制matshow,但是当我依赖于建议的方法here时,我会在情节周围获得额外的空间,这是我无法摆脱的。解决方案是什么?
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import ticker
def forceAspect(ax,aspect=1):
im = ax.get_images()
extent = im[0].get_extent()
ax.set_aspect(abs((extent[1]-extent[0])/(extent[3]-extent[2]))/aspect)
a=np.random.randn(8,4)
plt.matshow(a)
plt.colorbar(shrink=.5)
ax=plt.gca()
forceAspect(ax,aspect=1)
plt.xticks(np.arange(0, 4, 1), np.arange(1, 5, 1))
plt.yticks(np.arange(0, 8, 1), np.arange(1, 9, 1))
#plt.tight_layout()
#ax.xaxis.set_major_formatter(ticker.FormatStrFormatter('%1d'))
#ax.xaxis.set_ticks(np.arange(1, 6, 1))
plt.show()
答案 0 :(得分:1)
所以,据我所知,你需要两件事:1。调整颜色条的高度以匹配图的高度和改变图形的大小,使得没有太多它周围空荡荡的空间。 第一件事是相对容易实现的。对于第二个,我认为你必须手动指定数字大小。
import numpy as np
from matplotlib import pyplot as plt
def forceAspect(ax,aspect=1):
im = ax.get_images()
extent = im[0].get_extent()
ax.set_aspect(abs((extent[1]-extent[0])/(extent[3]-extent[2]))/aspect)
a=np.random.randn(8,4)
fig = plt.figure(1, figsize=(5,4))
plt.matshow(a,fignum=1)
ax=plt.gca()
forceAspect(ax,aspect=1)
plt.xticks(np.arange(0, 4, 1), np.arange(1, 5, 1))
plt.yticks(np.arange(0, 8, 1), np.arange(1, 9, 1))
cbar = plt.colorbar()
plt.draw()
pos_cbar = cbar.ax.get_position()
pos_ax = ax.get_position()
pos_cbar.y0 = pos_ax.y0
pos_cbar.y1 = pos_ax.y1
cbar.ax.set_position(pos_cbar)
plt.show()