我有一个这样的直方图(就像普通的直方图一样):
在我的情况下,总是有 20 个条形图(从 0 到 1 的 x 轴),并且条形图的颜色是根据 x 上的值定义的轴。
我想要的是在直方图的底部添加一个色谱,就像 http://wiki.scipy.org/Cookbook/Matplotlib/Show_colormaps 中的色谱一样,但我不这样做不知道如何添加它。
任何帮助将不胜感激!
以下是如何使用 matplotlib 在 Python 中向直方图添加色标的方法:
import matplotlib.pyplot as plt
import numpy as np
# 生成一些示例数据
data = np.random.rand(100)
# 创建一个包含 20 个 bin 的直方图
n_bins = 20
hist, bins, patches = plt.hist(data, bins=n_bins)
# 创建一个与 bin 数量相同的颜色映射
cm = plt.cm.get_cmap('viridis')
colors = cm(np.linspace(0, 1, n_bins))
# 为每个 bin 分配一种颜色
for i, patch in enumerate(patches):
patch.set_facecolor(colors[i])
# 添加色标
sm = plt.cm.ScalarMappable(cmap=cm, norm=plt.Normalize(vmin=0, vmax=1))
sm.set_array([]) # 这是必需的,即使我们没有将数据传递给 sm
cbar = plt.colorbar(sm, orientation='horizontal')
cbar.set_label('x 值')
plt.show()
这将生成一个带有色标的直方图,该色标显示从 0 到 1 的 x 值的映射。
以下是代码的工作原理:
-
创建直方图:
我们使用
plt.hist()
函数创建直方图,并指定 bin 的数量。 -
创建颜色映射:
我们使用
plt.cm.get_cmap()
函数创建一个颜色映射。在本例中,我们使用的是“viridis”颜色映射,但可以使用任何想要的颜色映射。 - 为每个 bin 分配颜色: 我们循环遍历每个 bin,并使用颜色映射中的相应颜色设置其面颜色。
-
添加色标:
我们使用
plt.colorbar()
函数添加色标。我们传入ScalarMappable
对象以指定颜色映射和规范化,并将方向设置为“水平”。我们还使用cbar.set_label()
设置色标的标签。
希望这对有所帮助!
标签:python,matplotlib,histogram,colorbar From: 30608731