减少水平色条间距

5

我试图生成一张具有多个轴的图,每个轴都有自己的颜色条(见下方代码)。如果我使用默认的颜色条绘图,则在图形和颜色条之间会得到太多的水平间距:

enter image description here

如果我尝试使用make_axes_locatable()方法,会得到这个可怕的结果:

enter image description here

这是什么情况,我该如何修复?
import numpy as np
from matplotlib import pyplot as plt
import matplotlib.gridspec as gridspec
from mpl_toolkits.axes_grid1 import make_axes_locatable

# Random data to plot
data = np.random.uniform(0., 1., (2, 100))
z = np.random.uniform(0., 10., 100)

# Define figure
fig = plt.figure(figsize=(30, 30))
gs = gridspec.GridSpec(12, 12)

for i in range(2):
    ax = plt.subplot(gs[2 * i:2 + (2 * i), 0:8])

    SC = plt.scatter(*data, c=z)

    # Colorbar 1
    cbar = plt.colorbar()

    # Colorbar 2
    # the_divider = make_axes_locatable(ax)
    # color_axis = the_divider.append_axes("right", size="1%", pad=0.)
    # cbar = plt.colorbar(SC, cax=color_axis)

    cbar.set_label("test", fontsize=15, labelpad=10)

fig.tight_layout()
plt.savefig('test.png', dpi=300, bbox_inches='tight')

1
下面的答案比我快:)如果需要参考,这里也有一个链接 https://dev59.com/TWYr5IYBdhLWcg3w6OGd - oetoni
1个回答

8

使用colorbarpad参数设置轴和色条之间的填充。 pad以原始轴大小的一部分作为空间单位给出。例如,pad=0.01可能是合理的。

import numpy as np
from matplotlib import pyplot as plt

# Random data to plot
data = np.random.uniform(0., 1., (2, 100))
z = np.random.uniform(0., 10., 100)

# Define figure
fig, axes = plt.subplots(nrows=2, figsize=(30, 30))

for i, ax in enumerate(axes.flat):
    sc = ax.scatter(*data, c=z)
    cbar = fig.colorbar(sc, ax=ax, pad=0.01)
    cbar.set_label("test", fontsize=15, labelpad=10)

fig.tight_layout()
plt.savefig('test.png', dpi=300, bbox_inches='tight')

enter image description here


比我想象中要简单得多。谢谢! - Gabriel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接