Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.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 matplotlib中子批次的多个颜色条(具有不同的范围/刻度)_Python_Matplotlib_Subplot_Colorbar - Fatal编程技术网

Python matplotlib中子批次的多个颜色条(具有不同的范围/刻度)

Python matplotlib中子批次的多个颜色条(具有不同的范围/刻度),python,matplotlib,subplot,colorbar,Python,Matplotlib,Subplot,Colorbar,我正在使用matplotlib用不同的色条绘制子图。 有关更多详细信息,请参见下面的代码 我想要实现的目标是,附加的色条对于不同的子批次具有不同的范围(刻度)。 这可以通过设置不同的ci来实现(参见下面的代码)。 例如,左2列子批次应带有范围为0~100,21间隔的颜色条;右侧的2列子批次应具有范围为0~5、间隔为21的颜色条 但是,第一个颜色栏没有0~100个标签。请参阅所附图片。 我猜左边的子图在图案和颜色方面仍然是正确的,只有左边颜色栏的“标签”是错误的 我该怎么做才能解决这个问题 多谢各

我正在使用matplotlib用不同的色条绘制子图。 有关更多详细信息,请参见下面的代码

我想要实现的目标是,附加的色条对于不同的子批次具有不同的范围(刻度)。 这可以通过设置不同的ci来实现(参见下面的代码)。 例如,左2列子批次应带有范围为0~100,21间隔的颜色条;右侧的2列子批次应具有范围为0~5、间隔为21的颜色条

但是,第一个颜色栏没有0~100个标签。请参阅所附图片。 我猜左边的子图在图案和颜色方面仍然是正确的,只有左边颜色栏的“标签”是错误的

我该怎么做才能解决这个问题

多谢各位

fig, axs = plt.subplots(nrows=2, ncols=4, figsize=(10, 10)) #, constrained_layout=True)
fig.subplots_adjust(bottom=0.05, top=0.95, left=0.15, right=1.6,
                    wspace=0.1, hspace=0.15)

for i, ax in enumerate(axs.flat):
    cmap = plt.get_cmap('gist_earth_r')
    cmap.set_over('navy')
    cmap.set_under('white')
    if i < 2 or (i >= 4 and i<= 5):
        ci = np.linspace(0., 100., 21)
    else:
        ci = np.linspace(0.,5.,21)

    norm = matplotlib.colors.BoundaryNorm(ci, cmap.N)
    pcm = ax.pcolormesh( x, z, cs[i], cmap=cmap, norm=norm )
    ax.set_xticks([-90,-60,-30,0,30,60,90])
    ax.set_xticklabels(['90S','60S','30S','0','30N','60N','90N'])
    ax.set_yticks([1000,850,700,500,300,100])
    ax.set_ylabel('')
    ax.set_xlabel('')
    ax.invert_yaxis()
    ax.set_title(titles[i],loc='center',pad='5')#,fontdict=font)
    ax.xaxis.set_major_formatter(ticker.NullFormatter())
    ax.yaxis.set_major_formatter(ticker.NullFormatter())


fig.colorbar(pcm, ax=axs[:, :2], shrink=0.6, location='bottom',extend='both', pad=0.05)
fig.colorbar(pcm, ax=axs[:, 2:], location='bottom', shrink=0.6, extend='both', pad=0.05)
#fig.colorbar(pcm, ax=[axs[1, 1]], location='right')


plt.show()


  [1]: https://i.stack.imgur.com/VDHdw.jpg
fig,axs=plt.subplot(nrows=2,ncols=4,figsize=(10,10))#,constrated_layout=True)
图子批次调整(底部=0.05,顶部=0.95,左侧=0.15,右侧=1.6,
wspace=0.1,hspace=0.15)
对于i,枚举中的ax(axs.flat):
cmap=plt.get\u cmap('gist\u earth\u r')
cmap.set_超过(‘海军’)
cmap.set_在('white'下)

如果i<2或(i>=4且i我重写了一点。主要问题是,您在同一pcolormesh上调用了colorbar两次,因为您是在循环之外进行的。而且,在我看来,您想要在colorbar上应用的更改只需要将vmin和vmax提供给pcolormesh(而不是一个规范)和在调用colorbar时给出的记号。示例代码段和下图:

import matplotlib.pyplot as plt
import numpy as np
fig, axs = plt.subplots(nrows=2, ncols=4, sharex=True, sharey=True,
                        figsize=(20, 16))
fig.subplots_adjust(bottom=0.05, top=0.95, left=0.15, right=1.6,
                    wspace=0.1, hspace=0.15)
cmap = plt.get_cmap('gist_earth_r')
cmap.set_over('navy')
cmap.set_under('white')
gridY, gridX = np.mgrid[0:1000:31 * 1j, -90:90:31 * 1j]
for i, ax in enumerate(axs.flatten(order='F')):
    if i < len(axs.flatten()) / 2:
        cs = np.random.default_rng().integers(101, size=(31, 31))
        pcm = ax.pcolormesh(gridX, gridY, cs, vmin=0, vmax=100, cmap=cmap)
    else:
        cs = np.random.default_rng().integers(6, size=(31, 31))
        pcm = ax.pcolormesh(gridX, gridY, cs, vmin=0, vmax=5, cmap=cmap)
    if i == len(axs.flatten()) / 2 - 1:
        fig.colorbar(pcm, ax=axs[:, :2], shrink=0.6, location='bottom',
                     pad=0.05, ticks=np.linspace(0, 100, 21))
    elif i == len(axs.flatten()) - 1:
        fig.colorbar(pcm, ax=axs[:, 2:], location='bottom', shrink=0.6,
                     pad=0.05, ticks=np.linspace(0, 5, 21))
ax.set_xticks([-90, -60, -30, 0, 30, 60, 90])
ax.set_xticklabels(['90S', '60S', '30S', '0', '30N', '60N', '90N'])
ax.invert_yaxis()
fig.savefig('so.png', bbox_inches='tight')
导入matplotlib.pyplot作为plt
将numpy作为np导入
图,axs=plt.子批次(nrows=2,ncols=4,sharex=True,sharey=True,
figsize=(20,16))
图子批次调整(底部=0.05,顶部=0.95,左侧=0.15,右侧=1.6,
wspace=0.1,hspace=0.15)
cmap=plt.get\u cmap('gist\u earth\u r')
cmap.set_超过(‘海军’)
cmap.set_在('white'下)
gridY,gridX=np.mgrid[0:1000:31*1j,-90:90:31*1j]
对于i,枚举中的ax(axs.flatte(order='F')):
如果i

如果提供帮助,在这里获得帮助的机会更高。