Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pyplot:带有FancyArrowPatch的虚线_Python_Matplotlib - Fatal编程技术网

Python pyplot:带有FancyArrowPatch的虚线

Python pyplot:带有FancyArrowPatch的虚线,python,matplotlib,Python,Matplotlib,我正在使用python和matplotlib.pyplot生成复杂的图形输出。我想将点线样式与FancyArrowPatch一起使用,但失败了 MWE: 这将生成以下图像: 但是,我想得到如下信息: 问题:我需要在MWE中更改什么才能获得较低的图像?如评论中所述,我怀疑是否有可能轻松更改FancyRowPatch的线型。这实际上是一个多边形意义上的面片,由13个点组成,这些点通过直线连接。如果更改线型,则不能仅对面片的一部分进行更改 一个选项可能确实可以将补丁分为箭头和尾巴。对于尾部,您将只

我正在使用
python
matplotlib.pyplot
生成复杂的图形输出。我想将点线样式与FancyArrowPatch一起使用,但失败了

MWE:

这将生成以下图像:

但是,我想得到如下信息:


问题:我需要在MWE中更改什么才能获得较低的图像?

如评论中所述,我怀疑是否有可能轻松更改FancyRowPatch的线型。这实际上是一个多边形意义上的面片,由13个点组成,这些点通过直线连接。如果更改线型,则不能仅对面片的一部分进行更改

一个选项可能确实可以将补丁分为箭头和尾巴。对于尾部,您将只参与其中的一部分,并沿这些点创建一条新线。可以为该行指定其自己的线型。头部可以保持填充面片,您可以为其选择不同的线型

您可以通过
箭头获取原始箭头的路径。get_path()
。请注意,这将修复坐标,即箭头的所有变换都将丢失。因此,您需要确保仅在设置了最终轴限制和图形大小后才执行此操作,并且如果以后更改其中任何一个,将以不希望的方式挤压箭头

import matplotlib.pyplot as plt
import matplotlib.path
import matplotlib.patches as patches


style="Simple,head_width=40,head_length=80"
kw = dict(arrowstyle=style, linestyle=None, lw=1,color="b",connectionstyle="arc3,rad=0.2")
arrow = patches.FancyArrowPatch((0,1), (1,1), **kw)

plt.gca().add_patch(arrow)
plt.gca().axis([0,1.03,0,1.1])

def split_arrow(arrow, color_tail="C0",color_head="C0", 
                ls_tail="-", ls_head="-",lw_tail=1.5, lw_head=1.5):    
    v1 = arrow.get_path().vertices[0:3,:]
    c1 = arrow.get_path().codes[0:3]
    p1 = matplotlib.path.Path(v1,c1)
    pp1 = patches.PathPatch(p1, color=color_tail, linestyle=ls_tail, 
                            fill=False, lw=lw_tail)
    arrow.axes.add_patch(pp1)

    v2 = arrow.get_path().vertices[3:8,:]
    c2 = arrow.get_path().codes[3:8]
    c2[0] = 1
    p2 = matplotlib.path.Path(v2,c2)
    pp2 = patches.PathPatch(p2, color=color_head, lw=lw_head, linestyle=ls_head)
    arrow.axes.add_patch(pp2)
    arrow.remove()

split_arrow(arrow, color_tail="crimson",color_head="limegreen", 
                ls_tail="--", lw_tail=3)

plt.show()

如评论中所述,我怀疑是否有可能轻松更改FancyArrowPatch的线型。这实际上是一个多边形意义上的面片,由13个点组成,这些点通过直线连接。如果更改线型,则不能仅对面片的一部分进行更改

一个选项可能确实可以将补丁分为箭头和尾巴。对于尾部,您将只参与其中的一部分,并沿这些点创建一条新线。可以为该行指定其自己的线型。头部可以保持填充面片,您可以为其选择不同的线型

您可以通过
箭头获取原始箭头的路径。get_path()
。请注意,这将修复坐标,即箭头的所有变换都将丢失。因此,您需要确保仅在设置了最终轴限制和图形大小后才执行此操作,并且如果以后更改其中任何一个,将以不希望的方式挤压箭头

import matplotlib.pyplot as plt
import matplotlib.path
import matplotlib.patches as patches


style="Simple,head_width=40,head_length=80"
kw = dict(arrowstyle=style, linestyle=None, lw=1,color="b",connectionstyle="arc3,rad=0.2")
arrow = patches.FancyArrowPatch((0,1), (1,1), **kw)

plt.gca().add_patch(arrow)
plt.gca().axis([0,1.03,0,1.1])

def split_arrow(arrow, color_tail="C0",color_head="C0", 
                ls_tail="-", ls_head="-",lw_tail=1.5, lw_head=1.5):    
    v1 = arrow.get_path().vertices[0:3,:]
    c1 = arrow.get_path().codes[0:3]
    p1 = matplotlib.path.Path(v1,c1)
    pp1 = patches.PathPatch(p1, color=color_tail, linestyle=ls_tail, 
                            fill=False, lw=lw_tail)
    arrow.axes.add_patch(pp1)

    v2 = arrow.get_path().vertices[3:8,:]
    c2 = arrow.get_path().codes[3:8]
    c2[0] = 1
    p2 = matplotlib.path.Path(v2,c2)
    pp2 = patches.PathPatch(p2, color=color_head, lw=lw_head, linestyle=ls_head)
    arrow.axes.add_patch(pp2)
    arrow.remove()

split_arrow(arrow, color_tail="crimson",color_head="limegreen", 
                ls_tail="--", lw_tail=3)

plt.show()

另一种方法是将箭头分为两部分:

  • 箭头轴(虚线)
  • 箭头(不带点)
画一条虚线相量


另一种方法是将箭头分为两部分:

  • 箭头轴(虚线)
  • 箭头(不带点)
画一条虚线相量


我怀疑是否有可能轻松更改FancyArrowPatch的线型。这实际上是一个多边形意义上的面片,由13个点组成,这些点通过直线连接。如果更改线型,则不能仅更改部分修补程序的线型。@重要事项fBeingernest您知道是否可以将整个修补程序分为两个单独的修补程序,然后我可以为其指定不同的样式?我怀疑是否可以轻松更改FancyRowPatch的线型。这实际上是一个多边形意义上的面片,由13个点组成,这些点通过直线连接。如果更改线型,则不能仅更改部分修补程序的线型。@ImportanceOfBeingErnest是否可以将整个修补程序分为两个单独的修补程序,然后我可以为其指定不同的样式?