有人可以解释matplotlib.patches.arc中的不同参数吗?

时间:2019-02-24 08:09:26

标签: python-3.x matplotlib

我只想了解基本参数及其具体功能-宽度,高度,角度,theta1,theta2。我遵循了官方文档,但我了解了中心是什么,但我不知道theta是什么1或2或角度或水平或垂直轴的长度意味着什么。 我尝试使用不同的数字对参数进行实验,但未能获得准确的结果。 我正在尝试在篮球场上创建三分线弧线

1 个答案:

答案 0 :(得分:1)

Arc类型是Ellipse的子类,扩展为添加两个值theta1theta2angleEllipse的行为Arc相同,并确定绘制椭圆的角度。

from matplotlib import pyplot as plt
from matplotlib.patches import Ellipse

fig = plt.figure(figsize=(2,5))
ax = fig.add_subplot(1,1,1)
ax.set_ylim(0, 50)
ax.set_xlim(0, 20)
ax.axis('off')

a = Ellipse((10, 45), 10, 3, 0, color='red', lw=1)
ax.add_patch(a)

a = Ellipse((10, 40), 10, 3, 10, color='red', lw=1)
ax.add_patch(a)

a = Ellipse((10, 35), 10, 3, 20, color='red', lw=1)
ax.add_patch(a)

a = Ellipse((10, 30), 10, 3, 30, color='red', lw=1)
ax.add_patch(a)

for a in range(0, 360, 40):
    a = Ellipse((10, 20), 10, 3, a, color='red', lw=1, fc='none')
    ax.add_patch(a)

这会产生-

elliipse rotation

请注意,对于一个完美的圆(等于heightwidth的椭圆),这没有什么区别(因为圆是旋转对称的)。

from matplotlib import pyplot as plt
from matplotlib.patches import Ellipse

fig = plt.figure(figsize=(2,4))
ax = fig.add_subplot(1,1,1)
ax.set_ylim(0, 40)
ax.set_xlim(0, 20)
ax.axis('off')

a = Ellipse((10, 25), 10, 10, 0, color='red', lw=1)
ax.add_patch(a)

a = Ellipse((10, 10), 10, 10, 45, color='red', lw=1)
ax.add_patch(a)

两个圆圈都相同。

rotation of a circle

matplotlib.patches.Arc的{​​{3}}解释说theta 1和2是—

  

theta1theta2float,可选

     

圆弧的开始和结束角度(以度为单位)。这些值是相对于角度的,例如。如果angle = 45,theta1 = 90,则绝对起始角度为135。默认theta1 = 0,theta2 = 360,即完整的椭圆。

关键说明是“默认theta1 = 0,theta2 = 360,即完整的椭圆”。 -这些参数用于绘制局部椭圆,以创建圆弧。 theta1是开始绘制 的椭圆的角度(或在椭圆上的位置),theta2是停止绘制的时间。请注意,椭圆的计算不受影响。

以下代码绘制了一系列弧线,这些弧线应使逻辑显而易见—

from matplotlib import pyplot as plt
from matplotlib.patches import Arc

fig = plt.figure(figsize=(2,5))
ax = fig.add_subplot(1,1,1)
ax.set_ylim(0, 50)
ax.set_xlim(0, 20)
ax.axis('off')

# A complete ellipse, using theta1=0, theta2=360.
a = Arc((10, 45), 10, 3, 0, 0, 360, color='red', lw=1)
ax.add_patch(a)

# Reduce theta2 to 350, last 10 deg of ellipse not drawn.
a = Arc((10, 40), 10, 3, 0, 0, 350, color='red', lw=1)
ax.add_patch(a)

# Rotate the ellipse (angle=90), theta1 & theta2 are relative to start angle & rotate too.
a = Arc((10, 30), 10, 3, 90, 0, 350, color='red', lw=1)
ax.add_patch(a)

# Rotate the ellipse (angle=180), as above.
a = Arc((10, 20), 10, 3, 180, 0, 350, color='red', lw=1)
ax.add_patch(a)

# Draw the top half of the ellipse (theta 0-180 deg). 
a = Arc((10, 10), 10, 3, 0, 0, 180, color='red', lw=1)
ax.add_patch(a)

# Draw the bottom half of the ellipse (theta 180-360 deg).
a = Arc((10, 5), 10, 3, 0, 180, 360, color='red', lw=1)
ax.add_patch(a)

这将产生以下图像,上面绘制的弧线是从上到下。与代码中的注释进行比较以进行解释。

Arc documentation