Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.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 使用LogNorm和ImageGrid时的Matplotlib颜色栏_Python_Matplotlib - Fatal编程技术网

Python 使用LogNorm和ImageGrid时的Matplotlib颜色栏

Python 使用LogNorm和ImageGrid时的Matplotlib颜色栏,python,matplotlib,Python,Matplotlib,我一直在尝试使用ImageGrid绘制一些面板。当我使用grid.cbar\u axes[0].colorbar(im)设置颜色栏时,颜色看起来很好,但颜色栏上的比例看起来像是从2x10^0变为None 我尝试了几十种变通方法,但都没有奏效。以下是我正在尝试的数字(我的错误版本): 不幸的是,我无法制作一个完美再现问题的MWE。我确实制作了一个部分复制它的MWE。如果我使用此代码: import matplotlib.pyplot as plt from mpl_toolkits.axes_g

我一直在尝试使用
ImageGrid
绘制一些面板。当我使用
grid.cbar\u axes[0].colorbar(im)
设置颜色栏时,颜色看起来很好,但颜色栏上的比例看起来像是从
2x10^0
变为
None

我尝试了几十种变通方法,但都没有奏效。以下是我正在尝试的数字(我的错误版本):

不幸的是,我无法制作一个完美再现问题的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)

我得到几乎相同的行为,除了上限似乎是好的。无论我对
vmin
vmax
使用什么值,下限仍然呈现相同的奇怪行为

你知道会发生什么吗?

尽管
cb=grid.cbar\u axes[0].colorbar(imc)
,这将在这里转换为
grid[2].cax.colorbar(im)
,我不明白为什么这会有意义

相反,通常的生成颜色条的方法也可以在这里使用,使用
Figure
的颜色条方法,并将ScalarMappable(此处
imc
)作为参数 以及将颜色条作为关键字参数生成到
cax
(此处
grid[2].cax
)的轴:


当使用
ImageGrid
colorbar
的官方示例时,我发现了其他奇怪的结果。使用此处建议的
方法解决了这些问题。
cb=F.colorbar(imc, cax=grid[2].cax)