如何使用Matplotlib在Python中计算轮廓内的面积? [英] How can I calculate the area within a contour in Python using the Matplotlib?

查看:1140
本文介绍了如何使用Matplotlib在Python中计算轮廓内的面积?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试找到一种使区域在特定轮廓线内的方法?
我使用matplotlib.pyplot创建轮廓.
有没有人对此有经验?

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?

非常感谢.

推荐答案

从轮廓集合的collections属性(由函数返回),可以获取描述每个轮廓的路径.然后,路径的vertices属性包含轮廓的有序顶点.

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.

使用顶点可以近似轮廓积分0.5 *(x * dy-y * dx),通过应用

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.

这是用于计算半径函数包围的面积的方法,即r =(x ^ 2 + y ^ 2)^ 0.5,对于r = 1.0,r = 2.0,r = 3.0.

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

输出:

r = 1.0: a = 2.83566351207
r = 2.0: a = 11.9922190971
r = 3.0: a = 27.3977413253

这篇关于如何使用Matplotlib在Python中计算轮廓内的面积?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆