python面积计算方法_如何使用Matplotlib在Python中计算轮廓内的面积?

1586010002-jmsa.png

I am trying to figure out a way to get the area inside a specific contour line?

I use matplotlib.pyplot to create my contours.

Does anyone have experience for this?

Thanks a lot.

解决方案

From the collections attribute of the contour collection, which is returned by the contour function, you can get the paths describing each contour. The paths' vertices attributes then contain the ordered vertices of the contour.

Using the vertices you can approximate the contour integral 0.5*(x*dy-y*dx), which by application of Green's theorem gives you the area of the enclosed region.

However, the contours must be fully contained in the plot, because otherwise the contours are broken up into multiple, not necessarily connected paths and the method breaks down.

Here's the method used to compute the area enclosed of the radius function, i.e. r = (x^2 + y^2)^0.5, for r=1.0, r=2.0, r=3.0.

import numpy as np

import matplotlib.pylab as plt

# Use Green's theorem to compute the area

# enclosed by the given contour.

def area(vs):

a = 0

x0,y0 = vs[0]

for [x1,y1] in vs[1:]:

dx = x1-x0

dy = y1-y0

a += 0.5*(y0*dx - x0*dy)

x0 = x1

y0 = y1

return a

# Generate some test data.

delta = 0.01

x = np.arange(-3.1, 3.1, delta)

y = np.arange(-3.1, 3.1, delta)

X, Y = np.meshgrid(x, y)

r = np.sqrt(X**2 + Y**2)

# Plot the data

levels = [1.0,2.0,3.0]

cs = plt.contour(X,Y,r,levels=levels)

plt.clabel(cs, inline=1, fontsize=10)

# Get one of the contours from the plot.

for i in range(len(levels)):

contour = cs.collections[i]

vs = contour.get_paths()[0].vertices

# Compute area enclosed by vertices.

a = area(vs)

print "r = " + str(levels[i]) + ": a =" + str(a)

plt.show()

Output:

r = 1.0: a = 2.83566351207

r = 2.0: a = 11.9922190971

r = 3.0: a = 27.3977413253

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值