首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >matplotlib中的适当突变尺度值

matplotlib中的适当突变尺度值
EN

Stack Overflow用户
提问于 2017-11-19 23:26:01
回答 1查看 717关注 0票数 3

我想知道关键参数mutational_scalematplotlib中的用途;对于用于绘制箭头的matplotlib.patches.FancyArrowPatch,默认情况下mutational_scale设置为1。从医生那里:

标量,可选(默认值: 1) 值,其中箭头样式的属性(例如,head_length)将被缩放。

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

代码语言:javascript
运行
复制
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()

箭头是不可见的.

但是,当我使用:

代码语言:javascript
运行
复制
arrow = mpl.patches.FancyArrowPatch((0,0), (1,1), arrowstyle='-|>', mutational_aspect=20)

我得到了正确的箭。

我的猜测是,整体数字的比例大于1,接近20,使得箭头不可见,突变尺度为1,但使用20时可见,但这只是猜测。

如果是这样的话,是否有一种方法可以知道整体图形的变异比例,以确定箭头的适当标度值?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-21 01:46:39

在文档中的带箭头注解小节中,给出了arrowstyle参数。对于-|>风格,上面写着

-|> head_length=0.4,head_width=0.2

这意味着箭头的头部是0.4*mutation_scale long,2*0.2*mutation_scale宽。单位就是点。

由于FancyArrowPatches被设计为与注释一起使用,因此在绘制注释时,突变标度将设置为以点表示的字体大小。例如,对于一个15pt的字体大小,mutation_scale=15

因此,当在自己的FancyArrowPatch上使用它时,可以设置所需的大小(点)

代码语言:javascript
运行
复制
arrow = mpl.patches.FancyArrowPatch((0,1), (1,1), arrowstyle='-|>', mutation_scale=15)

这将创建一个箭头的全箭头头宽度2*0.2*15=6点。

代码语言:javascript
运行
复制
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()

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

代码语言:javascript
运行
复制
arrow = mpl.patches.FancyArrowPatch((0,1), (1,1),
                    arrowstyle='-|>,head_width=3,head_length=6')

因此,以下内容将产生与上述相同的图像:

代码语言:javascript
运行
复制
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()
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47383130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档