我很抱歉,但我真的试图在文档中找到以下内容:
armA,armB,angleA,anngleB在plt.annotate中的含义是什么?例如,在:
ax.annotate('arc', xy=(1.5, -1), xycoords='data',
xytext=(-40, -30), textcoords='offset points',
arrowprops=dict(arrowstyle="->", connectionstyle=
"arc,angleA=0,armA=20,angleB=-90,armB=15,rad=7"),)
非常感谢!
答案 0 :(得分:2)
这些参数用于初始化ConnectionStyle.Arc
类。正如您可以详细了解here。
类ConnectionStyle.Arc(angleA = 0,angleB = 0,armA = None,armB = None, 弧度= 0.0)
基础:matplotlib.patches._Base
在两个之间创建一个picewise连续二次贝塞尔曲线路径 点。该路径可以有两个传递点,一个点放置 在臂A的距离和角A的角度A,另一个 相对于点B的点。边缘用rad舍入。
angleA:路径的起始角度
angleB:路径的结束角度
armA:起始臂的长度
armB:结束臂的长度
rad:边缘的圆角半径
connect(posA,posB)
答案 1 :(得分:0)
给定位置的文档非常稀疏,角度angleA,angleB,armA,armB都没有定义,所以这是一个反复试验的问题。
我编写了一个脚本,提供单选按钮,用于在ConnectionStyle angle3 , arc3 , angle 和 arc ,然后提供滑块输入 angleA , armA , angleB , armB , rad 。我发现每个ConnectionStyle只接受它自己的一组参数,例如,如果你提供一个radius(rad)到angle3,或者一个angleA到arc3,等等就有一个错误。换句话说你需要这种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)
我有一个脚本的截图,但我想我没有足够的声望点来发布它。