주어진 위치의 문서가 매우 희박하며 angleA, angleB, armA, armB 각도가 정의되어 있지 않으므로 시행 착오의 문제입니다.
나는
angleA,
의 armA,
angleB를 입력 ConnectionStyle angle3, arc3, 각도 및 아크하고 제공 슬라이더 중 하나를 선택하는 라디오 버튼을 제공하는 스크립트를 작성 ,
armB,
rad. 나는 각 ConnectionStyle이 자신의 인수 집합만을 허용한다는 것을 발견했다. 예를 들어, angle3에 반지름 (rad)을, arc3에 angleA를 제공하면 오류가 발생한다. 즉, 이런 종류의 if 문이 필요하다. 상이한 연결 유형에만 예상 인자를 전달할 :
if connStyle == 'angle3':
connstyle="angle3,angleA=%4.2f,angleB=%4.2f"%(angleA,angleB)
elif connStyle == 'arc3':
connstyle="arc3,rad=%4.2f"%(radius)
elif connStyle == 'angle':
connstyle="angle,angleA=%4.2f,angleB=%4.2f,rad=%4.2f"%(angleA,angleB,radius*10.)
elif connStyle == 'arc':
connstyle="arc,angleA=%4.2f,angleB=%4.2f,armA=%4.2d,armB=%4.2f,rad=%4.2f"%(angleA,angleB,armA,armB,radius)
각도 angleA 및 angleB 왼쪽 가리키는 0도 배향 될 것 하향 포인팅 90 도는, 즉 좌측으로 지향 반 시계 양성 각도 측정 도 단위. 그러나 커브는 중앙 범위 밖에서 정말로 이상한 것들을합니다.
다음은 전체 스크립트이므로 직접 재생할 수 있습니다. 이 물건은 거의 완전히 문서화되지 않았고 조금 특이합니다.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider, Button, RadioButtons
# Global variables
angleA = 90.0
armA = 1.0
angleB = 0.0
armB = 1.0
connStyle = 'angle3'
# connStyle = 'arc3'
# connStyle = 'angle'
# connStyle = 'arc'
radius=0.1
plt.close('all')
fig = plt.figure(figsize=(10,10))
ax = fig.add_axes([.25,.4,.7,.5])
plt.axis([0, 10, 0, 10])
axcolor = 'w'
axAngleA = plt.axes([0.25, 0.25, 0.65, 0.03], axisbg=axcolor)
axArmA = plt.axes([0.25, 0.2, 0.65, 0.03], axisbg=axcolor)
axAngleB = plt.axes([0.25, 0.15, 0.65, 0.03], axisbg=axcolor)
axArmB = plt.axes([0.25, 0.1, 0.65, 0.03], axisbg=axcolor)
axRadius = plt.axes([0.25, 0.05, 0.65, 0.03], axisbg=axcolor)
SlAngleA = Slider(axAngleA, 'AngleA', -180.0, 180.0, valinit=angleA)
SlArmA = Slider(axArmA, 'ArmA', -10., 10., valinit=armA)
SlAngleB = Slider(axAngleB, 'AngleB', -180.0, 180.0, valinit=angleB)
SlArmB = Slider(axArmB, 'ArmB', -10., 10., valinit=armB)
SlRadius = Slider(axRadius, 'Rad', -10., 10., valinit=radius)
# Display function
def display(connstyle):
ax.cla()
plt.annotate("ArrowTest",
xytext=(8, 8),
xy=(2,2),
arrowprops=dict(arrowstyle="->",
connectionstyle=connstyle))
# plt.show()
fig.canvas.draw_idle()
# Update function
def update(val):
global angleA, angleB, armA, armB, connStyle, radius
angleA = SlAngleA.val
armA = SlArmA.val
angleB = SlAngleB.val
armB = SlArmB.val
radius = SlRadius.val
if connStyle == 'angle3':
connstyle="angle3,angleA=%4.2f,angleB=%4.2f"%(angleA,angleB)
elif connStyle == 'arc3':
connstyle="arc3,rad=%4.2f"%(radius)
elif connStyle == 'angle':
connstyle="angle,angleA=%4.2f,angleB=%4.2f,rad=%4.2f"%(angleA,angleB,radius*10.)
elif connStyle == 'arc':
connstyle="arc,angleA=%4.2f,angleB=%4.2f,armA=%4.2d,armB=%4.2f,rad=%4.2f"%(angleA,angleB,armA,armB,radius)
# print 'connstyle = "%s"'%connstyle
display(connstyle)
SlAngleA.on_changed(update)
SlArmA.on_changed(update)
SlAngleB.on_changed(update)
SlArmB.on_changed(update)
SlRadius.on_changed(update)
resetax = plt.axes([0.8, 0.005, 0.1, 0.04])
button = Button(resetax, 'Reset', color=axcolor, hovercolor='0.975')
def reset(event):
SlangleA.reset()
SlangleB.reset()
SlRad.reset()
ax.cla()
button.on_clicked(reset)
rax = plt.axes([0.025, 0.5, 0.15, 0.15], axisbg=axcolor)
radio = RadioButtons(rax, ('angle3', 'arc3', 'angle', 'arc'), active=0)
def connstylefunc(label):
global connStyle
connStyle = label
# print "Switch connstyle to %s"%connStyle
display(connStyle)
fig.canvas.draw_idle()
radio.on_clicked(connstylefunc)
# Plot first time
plt.sca(ax)
display("angle3,angleA=%4.2f,angleB=%4.2f"%(angleA,angleB))
plt.show()
figmgr=plt.get_current_fig_manager()
figmgr.canvas.manager.window.raise_()
geom=figmgr.window.geometry()
x,y,dx,dy=geom.getRect()
figmgr.window.setGeometry(10,10,dx,dy)
나는 실제로 스크립트의 스크린 샷을 찍었지만 게시하는데 충분한 평판 포인트가 없다고 생각합니다.
[여기] (http://matplotlib.org/Matplotlib.pdf) 을 찾고 대답은 [여기] (http://matplotlib.org/1.3.1/api/artist_api.html)입니다. – adrin
@adrin 아티스트 링크에는 내가 원했던 것이 포함되어 있습니다! 정말 고맙습니다. 내가 그것을 받아 들일 수 있도록 답을하고 싶니? –