【发布时间】:2017-11-25 02:14:30
【问题描述】:
我正在尝试在 for 循环中进行绘图。
我有点数据pts 字典存储点ID和点坐标。字典rect 存储矩形的 id 以及它连接的点。然后我尝试使用patches.Rectangle 绘制矩形,并使用text 命令将矩形的id 放在其中心。在循环结束时,我正在绘制图形。但是什么都没有被绘制出来。我不明白这里出了什么问题。有什么建议吗?
另外,我们可以用plt.axis([xmin, xmax, ymin, ymax]) 代替fig.add_axes([0,0,30,30])吗?
import matplotlib.pyplot as plt
import matplotlib.patches as patches
plt.close('all')
pts={}
#defining points
pts.update({1:(0,0)})
pts.update({2:(10,0)})
pts.update({3:(10,20)})
pts.update({4:(0,20)})
pts.update({5:(30,0)})
pts.update({6:(30,20)})
#defining rectangle connecting to points
rect={}
rect.update({10:(1,2,3,4)})
rect.update({11:(2,5,6,3)})
#plotting
fig = plt.figure()
ax = fig.add_axes([0,0,30,30])
for i in rect:
p2=rect[i]
dx,dy = pts[p2[0]]
wd = pts[p2[1]][0] - pts[p2[0]][0]
ht = pts[p2[3]][1] - pts[p2[0]][1]
midpt = [ (pts[p2[0]][0] + pts[p2[2]][0])/2, (pts[p2[0]][1] + pts[p2[2]][1])/2 ]
#finding midpoint of points zeroth and second
#x_mid= (x_0+x_2)/2 and similar for y_mid
p = patches.Rectangle((dx,dy), wd,ht,fill=False, clip_on=False)
ax.add_patch(p)
plt.text(midpt[0],midpt[1],i,color='k')
else:
plt.show()
更新:
我正在使用带有for 循环的else 子句,这是允许的。目的是在 for 循环执行完成后进行绘图。欲了解更多信息,Hidden features of Python
【问题讨论】:
-
底部有一对时髦的线条;缺少
if吗? -
@andyg0808 :如果您在谈论
if else,情况并非如此。很多人不知道for循环有可选的else子句。我选择这种方式是因为plt.show()将在循环完成后执行。请看stackoverflow.com/questions/101268/…
标签: python matplotlib plot