【发布时间】:2022-01-06 16:04:53
【问题描述】:
假设你有以下数据:
x1_Length = 100
x1 = np.linspace(10,100,num=x1_Length)
y1 = np.linspace(0, 1.3, num=x1_Length)
x2_Length = 200
x2 = np.linspace(50, 200, num=x2_Length)
y2 = np.exp(np.linspace(0, 1, num=x2_Length))
如果你想绘制这个,它会很简单:
fig, ax = plt.subplots()
ax.plot(x1,y1, ".g")
ax.plot(x2,y2, "--r")
这给出了预期的结果,即使绘制的数组具有不同的长度并且不共享 x 数据。
现在,假设您想在强度图中绘制相同的数据。这会导致一些问题:
-
据我了解,强度图(例如
imshow)绘制二维数组,因此没有 x 轴刻度或 y 轴刻度的直接概念。数据根据其在数组中的索引呈现。在这里,这将是一个问题,因为两个数组的第一个元素不对应相同的 x 值。 -
二维数组中的所有行/列都需要具有相同的长度。这是两个问题中的次要问题,因为我总能找出最长的数据集并用例如 NaN 填充所有较短的数据集,如下所示:
dataset = [x1_data, x2_data] max_Length = np.max([array[0,:].shape[0] for array in dataset ]) data_array = np.nan * np.ones((2*len(dataset), max_Length)) for i, spectrum_array2D in enumerate(dataset): length = spectrum_array2D[0,:].shape[0] firstRowOfInsertion = 2*i data_array[[firstRowOfInsertion, firstRowOfInsertion+1], :length] = spectrum_array2D
我没有看到任何技术限制,为什么不能像plt.plot()can 那样将多个不同数据的数组绘制成强度图。理想情况下,我需要告诉它可以预期的强度图,在本例中,2 个水平数据切片,然后提供 x 数据(绘制在 x 轴上)、y 数据(绘制在colorbar) 用于该图应进入的切片的每个索引。您知道实现此目的的方法或任何能够实现此目的的软件包吗?
编辑:最终,我想要一个看起来像这样的图,它是从下面的@wtw 建议中采用的(这个图中的数据是随机的,我需要它是我的 y1 和 y2 数组):
【问题讨论】:
-
您的数据集在第一部分是一维的,在第二部分是二维的。 x 和 y 坐标告诉 matplotlib 在 2D 监视器上绘制点的位置(实际上是线段)。在第二种情况下,您希望您的输出是什么样的?
-
所以基本上,有什么能力,究竟是什么?
-
1) pcolormesh 还绘制二维数组,它们具有 xscale 和 yscale。您还可以使用
extentskwarg 在 imshow 中伪造 x/y 比例。 2) pcolormesh 和 imshow 都不要求列数等于行数。
标签: python numpy matplotlib plot