创建二维轮廓P

2024-03-29 08:00:16 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我发现了几个关于构建这样一个图(Python : 2d contour plot from 3 listshttps://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)

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

^{pr2}$

救命啊!在

What I believe to be a 2D contour plot

Example of my Data


Tags: 数据fromhttps名称列表plotmatplotlibnp
3条回答

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

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)
    
  • z值等于每个数的乘积减1,在这种情况下是16。在

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

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

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

因此,您只需将数据重塑为二维数组(在本例中,将其转置,因为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()

enter image description here

在matlib中寻找这个函数我相信你是什么

pcolormesh(x, y, z)

解决问题的最佳方法是遵循此page中包含的脚本。在

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

绘制不规则数据等高线的另一种方法:

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

enter image description here

相关问题 更多 >