Python matplotlib:减少子批次中的轴宽度

Python matplotlib:减少子批次中的轴宽度,python,matplotlib,bar-chart,colorbar,colormap,Python,Matplotlib,Bar Chart,Colorbar,Colormap,我有一个matplotlib条形图,它是根据一些规则通过一个颜色映射来着色的。我需要在主轴的右边有一个颜色条,所以我添加了一个带有 fig, (ax, ax_cbar) = plt.subplots(1,2) 并设法在ax_条轴上绘制颜色条,同时在ax轴上显示数据。现在我需要减小ax_条的宽度,因为它看起来像这样: 我该怎么办?使用子地块将始终平均分割您的数字。您可以通过多种方式手动分割图形。我首选的方法是使用subplot2grid 在本例中,我们将图形设置为1行10列。然后,我们将ax设

我有一个matplotlib条形图,它是根据一些规则通过一个颜色映射来着色的。我需要在主轴的右边有一个颜色条,所以我添加了一个带有

fig, (ax, ax_cbar) = plt.subplots(1,2)
并设法在ax_条轴上绘制颜色条,同时在ax轴上显示数据。现在我需要减小ax_条的宽度,因为它看起来像这样:


我该怎么办?

使用
子地块将始终平均分割您的数字。您可以通过多种方式手动分割图形。我首选的方法是使用
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))

使用
子地块
将始终平均分割您的数字。您可以通过多种方式手动分割图形。我首选的方法是使用
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))

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

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()


如果您确实想自己为颜色栏创建一个特殊的轴,最简单的方法是在调用
子图时设置宽度:

fig , (ax, cax) = plt.subplots(ncols=2, gridspec_kw={"width_ratios" : [10,1]})
然后将颜色条放到
cax
轴上

fig.colorbar(sm, cax=cax)

请注意,本作业已经提出了以下问题:


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

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()


如果您确实想自己为颜色栏创建一个特殊的轴,最简单的方法是在调用
子图时设置宽度:

fig , (ax, cax) = plt.subplots(ncols=2, gridspec_kw={"width_ratios" : [10,1]})
然后将颜色条放到
cax
轴上

fig.colorbar(sm, cax=cax)

请注意,本作业已经提出了以下问题:


使用了
宽度比
和多个沿海热图。我想这是最简单的方法。回答得很好。使用了多个沿海热图的宽度比。我想这是最简单的方法。回答得很好。