gpt4 book ai didi

python - 在 Python 中,如何为不等距/随机 y 值绘制颜色编码的二维图(X、Y、颜色)?

转载 作者:行者123 更新时间:2023-12-01 07:23:00 24 4
gpt4 key购买 nike

我正在绘制类似于频谱图的东西。我有一些长度为 N 的一维数组,每个数组对应于二维图中的一条“水平线”。对于频谱图 [M,N],我需要 M 个这样的 N 长度数组来填充所有 M 个水平线。

但是,我只有少量行的数据。假设我有 m < M 个数组。这些不对应于 y 轴上的等距值。它们是随机值。例如,我可能只有对应于第 6、44、44.5 和 92 行(其中 M=4)的数组。

我想要 y 轴从 0 到 100,并仅针对我拥有的 y 值绘制这些值线,否则绘制 0。我该怎么做?

如果我的 y 值数组在 Y 轴上等距,我可以这样做:

 y_values = np.array(M) # ticks for y axis - equal-spaced. eg: [2, 2.5, 3, 3.5]. These are the only values for which data exists.
get_y_values(y_values)
data = np.array([M,N])
get_data(data)

fig = pyplot.figure()
vmax = np.amax(data)
ax = fig.add_subplot(1, 1, 1)
ax.imshow(data, origin='lower', aspect='auto', vmin=0, vmax=vmax)

ax.set_xlabel('Time')
ax.set_ylabel('Frequency')
ax.set_yticks(np.arange(0, y_values.size))
ax.set_yticklabels(yvalues)

pyplot.show()

但它不适用于随机 y 值,因为它们会显示为等距 - 当它们不是时。

最佳答案

有多种方法可以做到这一点,但一种快速而简单的方法是循环每个时间序列并单独绘制它们。

import numpy as np
import matplotlib.pyplot as plt

M = 4
N = 100
dy = 2.0 # The desired vertical thickness of each line

y_values = np.arange(0,100)

y_values = [6, 44, 47, 92]
x = np.arange(0, N)
data = np.random.rand(M,N)

fig = plt.figure()
vmax = np.amax(data)
ax = fig.add_subplot(1, 1, 1)

for i in range(M):
ax.pcolor(x, [y_values[i], y_values[i] + dy], [data[i],data[i]], vmin=0, vmax=vmax)

ax.set_xlabel('Time')
ax.set_ylabel('Frequency')
ax.set_yticks(y_values)
ax.set_ylim(0,100)

plt.show()

Here's a link to the output figure.

关于python - 在 Python 中,如何为不等距/随机 y 值绘制颜色编码的二维图(X、Y、颜色)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57596996/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com