我在matplotlib中轮廓化某些数据时遇到麻烦。我正在尝试绘制从3d温度场切下的温度垂直截面图。
我的温度阵列(T)的尺寸为50 * 300,其中300是均匀间隔的水平高度的数量。但是,垂直高度的数量为50:a)间距不均匀;b)每个垂直列的起始级别都不同。因为在其中总是有50个垂直高度,但是有时它们的跨度是100-15000 m,有时是300-20000 m(由于地形差异)。
我还具有一个2d高度数组(Z;与T形状相同),一个1d水平位置数组(LAT)和一个1d地形高度数组(TER)。
我正在尝试获得与此处类似的图,在该图中您可以看到地形被涂黑并且周围数据轮廓化。
我对此进行的首次尝试是创建一个水平距离和高度的网格,然后再用这些参数创建轮廓温度。但是numpy.meshgrid需要1d输入,而我的身高是2d变量。做这样的事情只是从第一列开始向上轮廓:
ax1 = plt.gca()
z1, x1 = np.meshgrid(LAT, Z[:,0])
plt.contourf(z1, x1, T)
ax1.fill_between(z1[0,:], 0, TER, facecolor='black')
哪个产生这个。如果我在网状网格中使用Z [:,-1],它会在地下为左侧的列绘制轮廓,这显然是我所不希望的。我真正想要的是在Meshgrid中为Z使用一些2d数组,但是我不确定该怎么做。
我也研究了griddata函数,但这也需要一维输入。有人对如何解决这个问题有任何想法吗?任何帮助表示赞赏!
据我了解,您的数据是结构化的。然后,您可以直接使用中的contourf
或contour
选项matplotlib
。您提供的代码有正确的主意,但您应该使用
x1, z1 = np.meshgrid(LAT, Z[:,0])
plt.contourf(x1, Z, T)
轮廓。我下面有一个例子
import numpy as np
import matplotlib.pyplot as plt
L, H = np.pi*np.mgrid[-1:1:100j, -1:1:100j]
T = np.cos(L)*np.cos(2*H)
H = np.cos(L) + H
plt.contourf(L, H, T, cmap="hot")
plt.show()
看起来,网格是使用原始边界框生成的,但是该图是使用已转换的高度而不是初始高度绘制的。另外,您可以使用tricontour
非结构化数据(或一般而言),但随后需要生成三角剖分(在您的情况下很简单)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句