使用LogNorm和ImageGrid时的Matplotlib colorbar

2024-05-05 14:37:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直试图用ImageGrid绘制一些面板。当我使用grid.cbar_axes[0].colorbar(im)来设置颜色条时,颜色看起来很好,但是颜色条上的刻度看起来好像是从2x10^0到{}。在

我试过几十种变通办法,但都没用。下面是我想做的数字(我的错误版本):

enter image description here

不幸的是,我无法制作出完美再现问题的MWE。我确实制作了一个部分复制的MWE。如果我使用这个代码:

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import ImageGrid
from matplotlib.colors import LogNorm

def get_demo_image():
    import numpy as np
    from matplotlib.cbook import get_sample_data
    f = get_sample_data("axes_grid/bivariate_normal.npy", asfileobj=False)
    z = np.load(f)
    return abs(z), (-3, 4, -4, 3)

F = plt.figure(figsize=(5.5, 3.5))
grid = ImageGrid(F, 111,  # similar to subplot(111)
                 nrows_ncols=(1, 3),
                 axes_pad=0.1,
                 add_all=True,
                 label_mode="L",
                 cbar_mode='single'
                 )

Z, extent = get_demo_image()  # demo image

im1 = Z
im2 = Z
im3 = Z
vmin, vmax = 1e-3, 1e10
for i, im in enumerate([im1, im2, im3]):
    ax = grid[i]
    imc = ax.pcolormesh(range(15), range(15), im, norm=LogNorm(vmin=vmin, vmax=vmax), linewidth=0, rasterized=True)

cb=grid.cbar_axes[0].colorbar(imc)

enter image description here

我得到了几乎相同的行为,只是上限似乎没问题。不管我对vminvmax使用什么值,下限仍然呈现相同的奇怪行为。在

你知道会发生什么吗?在


Tags: fromimageimportgetmatplotlib颜色demogrid
1条回答
网友
1楼 · 发布于 2024-05-05 14:37:27

尽管official example使用了类似于 cb=grid.cbar_axes[0].colorbar(imc),这将在这里翻译成{},我不知道为什么这会有意义。在

相反,生成colorbar的常用方法也可以在这里使用Figure的colorbar方法和ScalarMappable(这里是imc)作为参数 以及生成colorbar作为cax(这里是grid[2].cax)的关键字参数的轴:

cb=F.colorbar(imc, cax=grid[2].cax)

enter image description here

相关问题 更多 >