想使用makeaxes在matplotlib中绘制带有1个colorbar的3个图

时间:2014-04-09 17:25:45

标签: python matplotlib plot

编辑 - 我希望这可以澄清。以下是来自this帖子的代码,与我尝试的内容非常相似。

fig, axes = plt.subplots(nrows=2, ncols=2, sharex=True, sharey=True)
for ax in axes.flat:
    im = ax.imshow(np.random.random((10,10)), vmin=0, vmax=1)

cax,kw = mpl.colorbar.make_axes([ax for ax in axes.flat])
plt.colorbar(im, cax=cax, **kw)

plt.show()

Vs以上。

    fig, axes = plt.subplots(nrows = 1, ncols = 3, sharex = True, sharey = True)

    for ax, z_val, unif, rangenum in zip(axes.flat, z_vals, UI, ranges):
    plot = plt.scatter(x_vals, y_vals, s = 5.5 * max(x_vals), c = z_val, cmap = 'rainbow')
        if efficiency_or_not:
            plot.vmin = 0
            plot.vmax = 1
            plot.xlabel = 'Uniformity: ' + unif
        else:
            plot.xlabel = 'Uniformity: ' + unif + '   ' + rangenum + ' ppm'

    cax, kw = mpl.colorbar.make_axes([ax for ax in axes.flat])
    plt.colorbar(plot, cax = cax, **kw)    
    plt.savefig('./'+ figname + '.jpg', dpi = 100)
    plt.close()

我想要的是水平平铺的3个图并添加下面的颜色栏。

以下原帖

我发现this并且我想使用这种技术....但是我在翻译它时遇到了麻烦。

我有3个独立的运行,它们是相同类型的数据。我想拍摄这3个图并将它们变成一个带有一个颜色条的图形。我需要每次报告执行5次,并且有一组我想强制vmin和vmax。

我目前的功能是......我得到的错误是:

plot_that_2(x_vals, y_vals, plots_list[j], plots_list[j+1], plots_list[j+2],plots_names_list[j], Plots_dictionary[plot_strings_list[i]][0],Plots_dictionary[plot_strings_list[i]][1])

cax, kw = mpl.colorbar.make_axes([ax for ax in axes.flat])

pb = parent.get_position(original=True).frozen() AttributeError: 'list' object has no attribute 'get_position'

第一个异议列在模块中,第二个在程序中,第三个在make_axes中。 x,y和z值都是来自numpy数组的列表。 figname是一个字符串,units是一个字符串,而efficiency_or_not是一个布尔值。

def plot_that_2(x_vals, y_vals, z_1_vals, z_2_vals, z_3_vals, figname, units, efficiency_or_not):
    UI = [uniformity_calc(z_1_vals), uniformity_calc(z_2_vals), uniformity_calc(z_3_vals)]
    ranges = [ str(int(np.max(z_1_vals) - np.min(z_1_vals))), str(int(np.max(z_2_vals) - np.min(z_2_vals))), str(int(np.max(z_3_vals) - np.min(z_3_vals)))]
    z_vals = [z_1_vals, z_2_vals, z_3_vals]
    fig, axes = plt.subplots(nrows = 1, ncols = 3, sharex = True, sharey = True)

    for ax, z_val, unif, rangenum in zip(axes.flat, z_vals, UI, ranges):
    plot = plt.scatter(x_vals, y_vals, s = 5.5 * max(x_vals), c = z_val, cmap = 'rainbow')
        if efficiency_or_not:
            plot.vmin = 0
            plot.vmax = 1
            plot.xlabel = 'Uniformity: ' + unif
        else:
            plot.xlabel = 'Uniformity: ' + unif + '   ' + rangenum + ' ppm'

    cax, kw = mpl.colorbar.make_axes([ax for ax in axes.flat])
    plt.colorbar(plot, cax = cax, **kw)    
    plt.savefig('./'+ figname + '.jpg', dpi = 100)
    plt.close()

1 个答案:

答案 0 :(得分:2)

要将彩条移动到底部,您只需添加orientation="horizontal"location='bottom'。以用户1442911为例:

fig, axes = plt.subplots(nrows=1, ncols=3)

for ax in axes.flat:
    im = ax.imshow(np.random.random((10,10)), vmin=0, vmax=1)

cax, kw = mpl.colorbar.make_axes([ax for ax in axes.flat], location='bottom')
plt.colorbar(im, cax=cax, **kw)

plt.show()

enter image description here