首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无序x,y,z数据的Numpy网格

无序x,y,z数据的Numpy网格
EN

Stack Overflow用户
提问于 2019-01-30 17:46:45
回答 1查看 638关注 0票数 1

我有如下所示的x、y和z数据(示例数据):

代码语言:javascript
复制
x_data = [2, 2, 2, 3, 3, 3, 1, 1, 1, 4, 4, 4]
y_data = [16, 64, 32, 64, 32, 16, 16, 32, 64, 32, 16, 64]
z_data = [64, 31, 29, 78, 72, 63, 93, 40, 54, 35, 44, 3]

因为我可以将每个z值映射到一个唯一的x/y数据对,所以我想在matplotlib中将其绘制为一个填充的countour图。contourf要求x和y要么是网格,要么是z的相应维度的大小。

目前,我用来准备数据的代码如下:

代码语言:javascript
复制
mesh_x, mesh_y = np.meshgrid(np.unique(x_data), np.unique(y_data))
mesh_z = np.zeros(mesh_x.shape)

for x, y, z in zip(x_data, y_data, z_data):
    mesh_z[np.bitwise_and(y == mesh_y, x == mesh_x)] = z

因为np.unique对值进行了重新排序,所以我不能使用np.reshape(z_data, mesh_x.shape)来创建所需的数据结构。

虽然这个解决方案有效,但我觉得肯定有更好的方法来实现这一点。

EN

回答 1

Stack Overflow用户

发布于 2019-01-30 19:30:34

我认为这就是你想要的:

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt

x_data = np.asarray([2, 2, 2, 3, 3, 3, 1, 1, 1, 4, 4, 4])
y_data = np.asarray([16, 64, 32, 64, 32, 16, 16, 32, 64, 32, 16, 64])
z_data = np.asarray([64, 31, 29, 78, 72, 63, 93, 40, 54, 35, 44, 3])
# Sort coordinates and reshape in grid
idx = np.lexsort((y_data, x_data)).reshape(4, 3)
# Plot
plt.contourf(x_data[idx], y_data[idx], z_data[idx])

输出:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54437559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档