gpt4 book ai didi

python - 通过热图绘制横截面

转载 作者:太空狗 更新时间:2023-10-30 02:46:46 27 4
gpt4 key购买 nike

我有一个形状数组 (201,201),我想通过数据绘制一些横截面,但我无法访问相关点。例如说我想绘制由图中的线给出的横截面,

from pylab import *
Z = randn(201,201)
x = linspace(-1,1,201)
X,Y = meshgrid(x,x)
pcolormesh(X,Y,Z)
plot(x,x*.5)

我想在不同的方向绘制这些,但如果有帮助,它们将始终通过原点...

最佳答案

基本上,您想要沿一条线(或任意路径)插入二维网格。

首先,您应该决定是要对网格进行插值还是只进行最近邻采样。如果你想做后者,你可以只使用索引。

如果你想插值,看看scipy.ndimage.map_coordinates .一开始有点难以理解,但它非常适合这个。 (这比使用假设数据点随机分布的插值例程要高效得多。)

我将举一个例子。这些改编自 answer I gave to another question.但是,在这些示例中,所有内容都以“像素”(即行、列)坐标绘制。

在您的情况下,您在与“像素”坐标不同的坐标系中工作,因此您需要将“世界”(即 x、y)坐标转换为“像素”坐标以进行插值。

首先,这是一个使用 map_coordinates 进行三次插值的示例:

import numpy as np
import scipy.ndimage
import matplotlib.pyplot as plt

# Generate some data...
x, y = np.mgrid[-5:5:0.1, -5:5:0.1]
z = np.sqrt(x**2 + y**2) + np.sin(x**2 + y**2)

# Coordinates of the line we'd like to sample along
line = [(-3, -1), (4, 3)]

# Convert the line to pixel/index coordinates
x_world, y_world = np.array(zip(*line))
col = z.shape[1] * (x_world - x.min()) / x.ptp()
row = z.shape[0] * (y_world - y.min()) / y.ptp()

# Interpolate the line at "num" points...
num = 1000
row, col = [np.linspace(item[0], item[1], num) for item in [row, col]]

# Extract the values along the line, using cubic interpolation
zi = scipy.ndimage.map_coordinates(z, np.vstack((row, col)))

# Plot...
fig, axes = plt.subplots(nrows=2)
axes[0].pcolormesh(x, y, z)
axes[0].plot(x_world, y_world, 'ro-')
axes[0].axis('image')

axes[1].plot(zi)

plt.show()

enter image description here

或者,我们可以使用最近邻插值法。一种方法是将 order=0 传递给上面示例中的 map_coordinates。相反,我将使用索引来展示另一种方法。如果我们只是改变行

# Extract the values along the line, using cubic interpolation
zi = scipy.ndimage.map_coordinates(z, np.vstack((row, col)))

收件人:

# Extract the values along the line, using nearest-neighbor interpolation
zi = z[row.astype(int), col.astype(int)]

我们会得到:

enter image description here

关于python - 通过热图绘制横截面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18920614/

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