我正在尝试将颜色条缩短一半。有谁知道如何做到这一点?我尝试了cax.get_position()然后cax.set_position(),但是这个方法不起作用。
此外,似乎axis_grid1创建的轴具有与原始轴相同的bbox位置。这是一个错误吗?
PS。我必须使用axes_grid1来创建颜色条轴,因为之后我需要使用tight_layout(),而tight_layout()仅适用于axes_grid1创建的轴,而不适用于add_axes()创建的轴。
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
import numpy as np
plt.figure()
ax = plt.gca()
im = ax.imshow(np.arange(100).reshape((10,10)))
divider = make_axes_locatable(ax)
cax = divider.append_axes("right", size="5%", pad=0.05)
bbox1 = ax.get_position()
print(bbox1)
bbox1 = cax.get_position()
print(bbox1)
plt.colorbar(im, cax=cax)
plt.show()
答案 0 :(得分:2)
axes_divider
的重点是划分轴以为新轴腾出空间。这可确保所有轴都具有相同的周围框。那就是你看到的那个盒子。
在this question中显示了在figue中某个位置创建颜色条的一些常用方法。这里的问题似乎是能够调用tight_layout
。这可以通过以下两个选项实现。 (可能还有其他人。)
我对此处的具体要求不太确定,但似乎使用正常的网格布局会更符合您的需求。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
fig = plt.figure()
gs = gridspec.GridSpec(2, 2, width_ratios=[95,5],)
ax = fig.add_subplot(gs[:, 0])
im = ax.imshow(np.arange(100).reshape((10,10)))
cax = fig.add_subplot(gs[1, 1])
fig.colorbar(im, cax=cax, ax=ax)
plt.tight_layout()
plt.show()
axes_grid1
如果你真的需要使用axes_grid1
,它可能会变得有点复杂。
import matplotlib.pyplot as plt
import matplotlib.axes
from mpl_toolkits.axes_grid1 import make_axes_locatable, Size
import numpy as np
fig, ax = plt.subplots()
im = ax.imshow(np.arange(100).reshape((10,10)))
divider = make_axes_locatable(ax)
pad = 0.03
pad_size = Size.Fraction(pad, Size.AxesY(ax))
xsize = Size.Fraction(0.05, Size.AxesX(ax))
ysize = Size.Fraction(0.5-pad/2., Size.AxesY(ax))
divider.set_horizontal([Size.AxesX(ax), pad_size, xsize])
divider.set_vertical([ysize, pad_size, ysize])
ax.set_axes_locator(divider.new_locator(0, 0, ny1=-1))
cax = matplotlib.axes.Axes(ax.get_figure(),
ax.get_position(original=True))
locator = divider.new_locator(nx=2, ny=0)
cax.set_axes_locator(locator)
fig.add_axes(cax)
fig.colorbar(im, cax=cax)
plt.tight_layout()
plt.show()