以下代码用于绘制弧。
import numpy as np
from matplotlib import patches
import matplotlib.pyplot as plt
import math
xcenter=300
ycenter=300
angle=0
k=0
p=[100,155]
theta=[1.0471975512, 1.0471975512]
fig=plt.figure(1)
ax=fig.add_subplot(111)
plt.ion()
S=2
plt.show()
while k<S:
thetaval=0
if k==0:
e1=patches.Arc((xcenter, ycenter), p[k], p[k], 0.0, 0, theta[k]*(180/math.pi))
ax.add_patch(e1)
elif k!=0 and k<S-1:
e2=patches.Arc((xcenter, ycenter), p[k], p[k], 0.0, theta[k-1]*(180/math.pi), theta[k]*(180/math.pi))
ax.add_patch(e2)
elif k==S-1:
e3=patches.Arc((xcenter, ycenter), p[k], p[k], 0.0, theta[k-1]*(180/math.pi), theta[k]*(180/math.pi))
ax.add_patch(e3)
k=k+1
plt.show(block='True')
执行它时会给出以下输出:
我哪里错了?
答案 0 :(得分:1)
它们在坐标300周围被绘制,但它没有在那里缩放。从文档中可以看出:“弧必须在Axes实例中使用 - 它不能直接添加到图形中 - 因为它被优化为仅以高分辨率渲染轴边界框内的线段。”您负责定义轴限制。
现在,您有两个选项,一个是使用轴:
margin = 10
plt.axis([x0 - margin, x0 + max(p) + margin , y0 - margin , y0 + max(p) + margin])
另一种是在弧的两端绘制不可见的东西,以便matplotlib跟踪它。如果计算弧的末端[xend, yend]
的位置:
plt.scatter([x0, y0], [xend, yend], alpha=0)