gpt4 book ai didi

python - matplotlib axesgrid - 额外的颜色条?

转载 作者:太空宇宙 更新时间:2023-11-04 02:52:41 24 4
gpt4 key购买 nike

我想在使用 AxesGrid 工具包的绘图中添加另一个颜色条。例如,我在左侧使用 ImageGrid 添加了一个颜色条轴,然后在右侧手动添加了另一个。这是一个简单的例子:

f = plt.figure(1)
grid = ImageGrid(f, 111, # similar to subplot(111)
nrows_ncols=(2, 2),
axes_pad=0.01,
add_all=True,
cbar_location="left",
label_mode='L',
cbar_mode="edge",
cbar_size="3%",
cbar_pad="2%",
)
for i in range(3):
m = grid[i].matshow(np.arange(100).reshape((10, 10)))
plt.colorbar(m, grid.cbar_axes[0])
m = grid[3].matshow(np.arange(100).reshape((10, 10)), cmap='plasma')
plt.colorbar(m, shrink=0.5, anchor=(0, 0))
plt.show()

如何使新颜色条与网格中子图之一的位置完全匹配?我至少设法使用 shrink 和 anchor 来固定大小和 y 位置……但是如果我尝试考虑子图之间的填充,并且如果它们是矩形而不是正方形,它也会变得有点复杂……

enter image description here

最佳答案

一种选择是根据其中一个轴的位置手动放置颜色条轴。为此,首先需要绘制 Canvas ,以便知道位置。然后可以根据图像绘图的坐标创建一个新轴。这个新轴将用作颜色条轴。

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.axes_grid1 import ImageGrid

fig = plt.figure(1)
grid = ImageGrid(fig, 111, # similar to subplot(111)
nrows_ncols=(2, 2),
axes_pad=0.01,
add_all=True,
cbar_location="left",
label_mode='L',
cbar_mode="edge",
cbar_size="3%",
cbar_pad="2%",
)
for i in range(3):
m = grid[i].matshow(np.arange(100).reshape((10, 10)))
plt.colorbar(m, grid.cbar_axes[0])
m = grid[3].matshow(np.arange(100).reshape((10, 10)), cmap='plasma')

# first draw the figure, such that the axes are positionned
fig.canvas.draw()
#create new axes according to coordinates of image plot
trans = fig.transFigure.inverted()
g3 =grid[3].bbox.transformed(trans)
pos = [g3.x1 + g3.width*0.02, g3.y0, g3.width*0.03, g3.height ]
cax = fig.add_axes(pos) #l,b,w,h
# add colorbar to new axes
plt.colorbar(m, cax=cax)


plt.show()

enter image description here

此方法取决于图中轴的位置,一旦发生变化,例如由于图形被重新调整,可能会发生不可预见的事情。

另一种不依赖于绘制坐标的不同方法是(错误)使用内插轴并将内插放置在轴外。这样inset所在的坐标就是轴坐标,所以colorbar会根据轴改变位置。

from mpl_toolkits.axes_grid1.inset_locator import inset_axes

cax = inset_axes(grid[3], "3%", "100%", loc=3, bbox_to_anchor=(1.02,0,1,1),
bbox_transform=grid[3].transAxes, borderpad=0.0)
plt.colorbar(m, cax=cax)

关于python - matplotlib axesgrid - 额外的颜色条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43306001/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com