Python 创建二维等高线图

Python 创建二维等高线图,python,python-3.x,matplotlib,plot,Python,Python 3.x,Matplotlib,Plot,好吧,我在这里完全不知所措。我想我正在尝试构建一个二维等高线图。我不确定这是否是我实际上试图构建的情节的名称。我有一张我试图构建的附加图片 我发现了一些关于构建这样一个图(,)的有用问题和指南。我遇到的问题是,所有东西都要求x轴和y轴具有相同数量的数据点。但是,我的x轴列表有26个值,而我的y轴列表有1024个值。表示每个对应数据点需要的颜色的列表长度为26*1024=26624个数据点 我将尝试解释描述我的绘图的数据是如何工作的,但为了防止我做得不好,我还将附上我的数据的示例图片。基本上,它列

好吧,我在这里完全不知所措。我想我正在尝试构建一个二维等高线图。我不确定这是否是我实际上试图构建的情节的名称。我有一张我试图构建的附加图片

我发现了一些关于构建这样一个图(,)的有用问题和指南。我遇到的问题是,所有东西都要求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]
请帮忙


我相信您需要的是matplotlib中的这个函数

pcolormesh(x, y, z)
解决问题的最佳方法是按照本文中包含的脚本进行操作


你们能以可以复制的格式共享一点数据吗?我可以分享一段与您的数据一起使用的代码片段,以便进一步澄清。

我相信您正在寻找matplotlib中的此函数

pcolormesh(x, y, z)
解决问题的最佳方法是按照本文中包含的脚本进行操作


你们能以可以复制的格式共享一点数据吗?我可以分享一个与您的数据一起工作的代码片段,以便进一步澄清。

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

您有不同的x值和不同的y值,但您同样可以有不同数量的值。 唯一的要求是你必须

  • z值等于这两个数字的乘积,在本例中为25

    z = np.random.rand(nx*ny)
    
  • z值等于每个数字的乘积减去1,在这种情况下为16

    z = np.random.rand((nx-1)*(ny-1))
    
取决于要在栅格边缘还是中心定义值

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

因此,您只需将数据重塑为2D数组(在本例中,将其转置,因为x值沿第二个数组维度移动)

最后,您可以使用
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()

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

您有不同的x值和不同的y值,但您同样可以有不同数量的值。 唯一的要求是你必须

  • z值等于这两个数字的乘积,在本例中为25

    z = np.random.rand(nx*ny)
    
  • z值等于每个数字的乘积减去1,在这种情况下为16

    z = np.random.rand((nx-1)*(ny-1))
    
取决于要在栅格边缘还是中心定义值

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

因此,您只需将数据重塑为2D数组(在本例中,将其转置,因为x值沿第二个数组维度移动)

最后,您可以使用
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()

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

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()

我认为您的问题在于,当您应该搜索“热图”时,您正在搜索“等高线图”!我认为你的问题是,当你应该搜索“热图”时,你正在搜索“等高线图”!我很乐意,但我不知道如何将.txt文件上载到堆栈溢出。只是编辑了我的问题,添加了一些虚构的示例data@B.Moore-一般做法是将文件上载到文件共享服务,如pastebin或google drive,然后共享指向它们的链接,而不是将文件上载到。我很乐意,但我不知道如何将.txt文件上传到堆栈溢出。只是编辑了我的问题,加入了一些虚构的例子data@B.Moore-一般做法是将文件上载到文件共享服务(如pastebin或google drive),然后共享指向这些文件的链接,而不是将文件上载到。