问题描述
我正在尝试找到一种使区域在特定轮廓线内的方法?
我使用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中计算轮廓内的面积?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!