matplotlib中

时间:2017-11-19 23:26:02

标签: python python-3.x matplotlib

我想知道mutational_scale中关键参数matplotlib的目的;如果matplotlib.patches.FancyArrowPatch用于绘制箭头,则mutational_scale默认设置为1。来自文档:

  

标量,可选(默认值:1)

     

将缩放arrowstyle属性(例如head_length)的值。

当我在两个大小为300的散点之间绘制箭头时,如下所示:

import matplotlib.pyplot as plt
import matplotlib as mpl

fig, ax = plt.subplots()
ax.scatter([0,1],[0,1], s=300)
arrow = mpl.patches.FancyArrowPatch((0,0), (1,1), arrowstyle='-|>')
plt.show()

箭头不可见。

enter image description here

然而,当我使用:

arrow = mpl.patches.FancyArrowPatch((0,0), (1,1), arrowstyle='-|>', mutational_aspect=20)

我得到了正确的箭头。 enter image description here

我的猜测是整体数字按大于1的因子缩放,接近20,使箭头不可见,突变比例为1,但在使用20时可见。但这只是一个猜测。

如果是这样,有没有办法知道整个数字的变异缩放,以决定箭头的正确缩放值?

1 个答案:

答案 0 :(得分:1)

annotating-with-arrow小节中 在文档中,显示了arrowstyle参数。对于它所说的-|>样式

  

-|> head_length = 0.4,head_width = 0.2

这意味着箭头的长度为0.4*mutation_scale长且2*0.2*mutation_scale宽。单位是积分。

由于FancyArrowPatch es旨在与注释一起使用,因此在绘制注释时,突变比例将设置为点的fontsize。例如。对于15磅的字体,mutation_scale=15

FancyArrowPatch上使用arrow = mpl.patches.FancyArrowPatch((0,1), (1,1), arrowstyle='-|>', mutation_scale=15) 因此设置所需的磅数

2*0.2*15=6

这将创建一个箭头宽度为import matplotlib.pyplot as plt import matplotlib as mpl fig, ax = plt.subplots(dpi=100) ax.set_xlim([-0.6,5]) for i in [5,10,15,20,25]: ax.scatter([0,1],[i,i], s=(2*.2*i)**2) arrow = mpl.patches.FancyArrowPatch((0,i), (1,i), arrowstyle='-|>', mutation_scale=i) ax.add_patch(arrow) ax.text(1.2,i,"mutation_scale = {}".format(i), va="center") plt.show() 的箭头。

arrow = mpl.patches.FancyArrowPatch((0,1), (1,1),
                    arrowstyle='-|>,head_width=3,head_length=6')

enter image description here

或者,您可以直接指定head_length和head_width,

import matplotlib.pyplot as plt
import matplotlib as mpl

fig, ax = plt.subplots(dpi=100)
ax.set_xlim([-0.6,5])
for i in [5,10,15,20,25]:
    ax.scatter([0,1],[i,i], s=(2*.2*i)**2)
    arrow = mpl.patches.FancyArrowPatch((0,i), (1,i), 
                        arrowstyle='-|>,head_width={},head_length={}'.format(i/5.,.4*i))
    ax.add_patch(arrow)
    ax.text(1.2,i,"mutation_scale = {}".format(i), 
            va="center")
plt.show()

以下将产生与上述相同的图像:

server.py