matplotlib 如何用多种颜色绘制条形图?

ubbxdtey  于 2023-03-30  发布在  其他
关注(0)|答案(1)|浏览(159)

我正在处理频率和振幅的数据,我有一个这样的图:

作为输出,我有一个文件,其中包含形成曲线的所有值,类似于以下内容:
['0.2','1.2432',' 0.8611','1.7949',' 0.2074','1.1074',' 0.8018','1.5296',' 0.215','1.0072',' 0.7446','1.3624',' 0.223','1.0584','0.7606'...]
我可以得到这样的一个情节:但是我想做的是把它画在一个单独的条形图上,用与y轴值相关的颜色变化。像这样:https://link.springer.com/article/10.1007/s10950-016-9564-x/figures/4
有人能帮帮我吗?

mznpcxlj

mznpcxlj1#

你可以在不同的x位置绘制1D热图。下面的方法使用imshow来创建这样的热图。它假设每个时间步的强度存储在一个2D数组中。

import matplotlib.pyplot as plt
from matplotlib.cm import ScalarMappable
import numpy as np

num_steps = 20
num_intensities = 50
# first, create some random test data
data = np.random.randn(num_intensities, num_steps)
data = data.cumsum(axis=1).cumsum(axis=0)
data -= data.min(axis=1, keepdims=True)
data = data / data.max(axis=1, keepdims=True) * 7

fig, ax = plt.subplots()
cmap = plt.get_cmap('turbo')
norm = plt.Normalize(data.min(), data.max())
for step in range(num_steps):
    ax.imshow(data[:, step:step + 1], extent=[step - 0.3, step + 0.3, 0, 1],
              aspect='auto', origin='lower', cmap=cmap, norm=norm)

ax.set_xlim(-0.5, num_steps - 0.5)
ax.set_ylim(0, 1)
ax.set_xticks(range(num_steps))
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)

plt.colorbar(ScalarMappable(cmap=cmap, norm=norm))
plt.tight_layout()
plt.show()

相关问题