繁体   English   中英

创建2D轮廓图

[英]Create 2D Contour Plot

好的,我在这里全然不知所措。 我想我正在尝试构建2D轮廓图。 我不确定这是否是我实际上试图构建的地块的名称。 我有一张我要构造的图片的附件

我发现了一些有用的问题和有关构建此类图的指南( Python:3个列表中的2d等高线图https ://matplotlib.org/api/_as_gen/matplotlib.pyplot.contour.html )是我遇到的问题就是一切都需要您的x和y轴具有相同数量的数据点。 但是,我的x轴列表具有26个值,而我的y轴列表具有1024个值。 表示每个相应数据点需要什么颜色的列表长26 * 1024 = 26624个数据点。

我将尝试解释描述情节的数据如何工作,但是以防万一,如果我做得不好,我还将附上示例数据。 基本上,它列出一个x值1024次。 每次列出x值时,都会列出相应的y和z值。 然后它将移至下一个x值。

例如:

x = np.array([0,0,0,0,0,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4])
y = np.array([0.2, 0.4, 0.6, 0.8, 1, 0.2, 0.4, 0.6, 0.8, 1, 0.2, 0.4, 0.6, 0.8, 1, 0.2, 0.4, 0.6, 0.8, 1, 0.2, 0.4, 0.6, 0.8, 1)]
color_map = random.sample(xrange(10), 25)

我提取数据没有问题,只是在提取数据后知道如何处理数据

FLR = np.genfromtxt("C:\\Users\\Downloads\\Python\\aupnipam_scan41_3DFLR(1).txt")
x = FLR[:,][:,0]
y = FLR[:,][:,1]
z = FLR[:,][:,2]

请帮忙!

我认为是2D等高线图

我的数据示例

我相信您正在寻找的是matplotlib中的此功能

pcolormesh(x, y, z)

解决问题的最佳方法是遵循此页面上包含的脚本。

您可以共享一种可以复制的格式的数据吗? 我可以共享一个与您的数据一起使用的代码段,以便进一步澄清。

不需要沿两个轴具有相同数量的数据。

x = np.array([0,0,0,0,0,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4])
y = np.array([0.2, 0.4, 0.6, 0.8, 1, 0.2, 0.4, 0.6, 0.8, 1, 
              0.2, 0.4, 0.6, 0.8, 1, 0.2, 0.4, 0.6, 0.8, 1, 0.2, 0.4, 0.6, 0.8, 1)]

您有nx = 5不同的x值和ny = 5不同的y值,但同样可以有不同数量的值。 唯一的要求是您要么

  • 与这两个数字的乘积一样多的z值,在这种情况下为25

     z = np.random.rand(nx*ny) 
  • 在这种情况下,与每个数字的乘积除以1的z值一样多。

     z = np.random.rand((nx-1)*(ny-1)) 

取决于要在网格边缘还是在中心边缘定义值。

在这种情况下,似乎第一种情况适用。

因此,您只需将数据重塑为2D数组(在这种情况下,将其转置,因为x值沿着第二个数组维)。

nx = 5
ny = 5

Z = z.reshape(ny, nx).T

最后,您可以使用imshow对其进行imshow 然后,棘手的部分是设置正确的图像范围,因为图像边缘不在中心像素位置,而是向右或向左移动了一半像素宽度。

extent = [x.min()-np.diff(x)[0]/2.,x.max()+np.diff(x)[0]/2.,
          y.min()-np.diff(y)[0]/2.,y.max()+np.diff(y)[0]/2.,]
plt.imshow(Z, extent=extent, aspect="auto")

plt.show()

在此处输入图片说明

绘制不规则数据轮廓的另一种方法:

import numpy as np
from scipy.interpolate import griddata

x = np.array([0,0,0,0,0,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4])
y = np.array([0.2, 0.4, 0.6, 0.8, 1, 0.2, 0.4, 0.6, 0.8, 1, 0.2, 0.4, 0.6, 0.8, 1, 0.2, 0.4, 0.6, 0.8, 1, 0.2, 0.4, 0.6, 0.8, 1])
z = np.random.rand(25)
xi = np.linspace(min(x),max(x),100)
yi = np.linspace(min(y),max(y),100)
zi = griddata((x,y),z,(xi[None:,],yi[:,None]),method='linear',fill_value=0.0)
plt.contourf(xi,yi,zi)
plt.colorbar()
plt.show()

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM