我有一个matplotlib条形图,根据一些规则通过色彩图对条形图进行着色。我需要在主轴右侧有一个颜色条,所以我添加了一个带
的新轴fig, (ax, ax_cbar) = plt.subplots(1,2)
并设法在ax_bar轴上绘制我的颜色条,同时我的数据显示在ax轴上。现在我需要减小ax_bar的宽度,因为它看起来像这样:
我该怎么办?
答案 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()
如果你想自己为彩条创建一个特殊的轴,最简单的方法是将调用中的宽度设置为subplots
:
fig , (ax, cax) = plt.subplots(ncols=2, gridspec_kw={"width_ratios" : [10,1]})
然后将颜色条放到cax
轴
fig.colorbar(sm, cax=cax)
<小时/> 请注意,此家庭作业已经要求提出以下问题: