好的,我在这里完全不知所措。我想我正在尝试构建2D轮廓图。我不确定这是否是我实际上试图构建的地块的名称。我附有一张我要构造的图片
我发现了一些有关构建这样的图的有用的问题和指南(Python : 2d contour plot from 3 lists,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]
请帮助!
答案 0 :(得分:1)
我相信您正在寻找的是matplotlib中的此功能
pcolormesh(x, y, z)
解决问题的最佳方法是遵循此page中包含的脚本。
您能否以可复制的格式共享一些数据?我可以共享一个与您的数据一起使用的代码段,以便进一步澄清。
答案 1 :(得分:0)
不需要在两个轴上具有相同数量的数据。 使用
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值,在这种情况下为16。
z = np.random.rand((nx-1)*(ny-1))
取决于要在网格边缘还是在中心边缘定义值。
在这种情况下,似乎第一种情况适用。
因此,您只需将数据重塑为2D数组(在这种情况下,将其转置,因为x值沿着第二个数组维)。
nx = 5
ny = 5
Z = z.reshape(ny, nx).T
最后,您可以使用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()
答案 2 :(得分:0)