我在matplotlib中与等高线图有点挣扎。我已经阅读了说明和示例,但似乎无法弄清楚我需要做什么。
我有x,y,z数据。数据基本如下:
x y z
1.1 2.1 0
0.9 3.2 1
2.6 4.1 0
3.1 1.1 1
0.3 0.9 1
...
这是一个很长的x-y坐标列表,每个点都是0-1。用例是球(1),击中(0)穿过棒球的击球区。当我使用plt.hexbin绘制数据时,您会看到以下内容:
我想要做的是在50%线上绘制轮廓。如下图所示:
我希望使用轮廓,但我不清楚如何获得数据是一种足够的格式来绘制等高线图并使用'等级'仅绘制50%的轮廓。显然函数contour(X,Y,Z)
需要2-D数组,所以根据我的数据,我不清楚我究竟需要做什么。
有没有办法可以将我拥有的数据放入函数中以获得我想要的等高线图,就像使用hexbin一样?
答案 0 :(得分:1)
首先,您需要根据x和y数据创建一个meshgrid:
X,Y = np.meshgrid(data[:,0], data[:,1])
然后你可以插入z网格:
# Choose one option
# Z = griddata((data[:,0], data[:,1]), data[:,2], (X, Y), method='nearest')
Z = griddata((data[:,0], data[:,1]), data[:,2], (X, Y), method='linear')
# Z = griddata((data[:,0], data[:,1]), data[:,2], (X, Y), method='cubic')
使用具有0.5:
指定级别的轮廓绘制数据levels = 0.5
contour(X,Y,Z,levels)
请告诉我这种方法是否适用于您。