matplotlib:减少子图中的轴宽度

时间:2017-05-16 13:10:29

标签: python matplotlib bar-chart colorbar colormap

我有一个matplotlib条形图,根据一些规则通过色彩图对条形图进行着色。我需要在主轴右侧有一个颜色条,所以我添加了一个带

的新轴
fig, (ax, ax_cbar) = plt.subplots(1,2)

并设法在ax_bar轴上绘制我的颜色条,同时我的数据显示在ax轴上。现在我需要减小ax_bar的宽度,因为它看起来像这样: enter image description here

我该怎么办?

2 个答案:

答案 0 :(得分:2)

使用subplots将始终平均分配您的数字。您可以通过多种方式手动分割图形。我首选的方法是使用subplot2grid

在这个例子中,我们将图形设置为1行10列。然后,我们将ax设置为行的开头,列=(0,0),宽度为9列。然后将ax_cbar设置为从(0,9)开始,默认情况下宽度为1列。

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(8,6))

num_columns = 10
ax = plt.subplot2grid((1,num_columns), (0,0), colspan=num_columns-1)
ax_cbar = plt.subplot2grid((1,num_columns), (0,num_columns-1))

答案 1 :(得分:1)

添加色条的常用方法是将其放在轴旁:

fig.colorbar(sm)

其中fig是数字,sm是颜色映射所引用的标量可映射。对于条形图,您需要自己创建此ScalarMappable。除此之外,不需要复杂的多轴创建。

import matplotlib.pyplot as plt
import matplotlib.colors
import numpy as np

fig , ax = plt.subplots()

x = [0,1,2,3]
y = np.array([34,40,38,50])*1e3
norm = matplotlib.colors.Normalize(30e3, 60e3)
ax.bar(x,y, color=plt.cm.plasma_r(norm(y)) )
ax.axhline(4.2e4, color="gray")
ax.text(0.02, 4.2e4, "42000", va='center', ha="left", bbox=dict(facecolor="w",alpha=1),
        transform=ax.get_yaxis_transform())

sm = plt.cm.ScalarMappable(cmap=plt.cm.plasma_r, norm=norm)
sm.set_array([])

fig.colorbar(sm)
plt.show()

enter image description here

如果你想自己为彩条创建一个特殊的轴,最简单的方法是将调用中的宽度设置为subplots

fig , (ax, cax) = plt.subplots(ncols=2, gridspec_kw={"width_ratios" : [10,1]})

然后将颜色条放到cax

fig.colorbar(sm, cax=cax)

<小时/> 请注意,此家庭作业已经要求提出以下问题: