- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 python
和 matplotlib.pyplot
生成复杂的图形输出。我想将 dotted
线型与 FancyArrowPatch
结合使用,但没有成功。
MWE:
import matplotlib.pyplot as plt
import matplotlib.patches as patches
style="Simple,head_width=4,head_length=8"
linestyle="dotted" # or "solid"
kw = dict(arrowstyle=style, linestyle=linestyle, color="b", connectionstyle="arc3,rad=1")
plt.gca().add_patch(patches.FancyArrowPatch((0,1), (1,1), **kw))
plt.savefig("MWE.pdf")
这会生成以下图像:
但是,我想得到类似的东西:
问题:我必须在我的 MWE 中更改什么才能获得较低的图像?
最佳答案
如评论中所述,我怀疑是否有可能轻松更改 FancyArrowPatch 的线型。这实际上是一个多边形意义上的补丁,由 13 个点组成,这些点由线连接。如果更改线型,则不能仅更改部分面片。
一个选项确实可以将补丁分成箭头和尾部。对于尾部,您只需要使用它的一部分并沿着这些点创建一条新线。这条线可以有自己的线型。头部可能会保留一个填充 block ,您可以为其选择不同的线型。
您可以通过arrow.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()
关于python - pyplot : Dotted line with FancyArrowPatch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47180328/
我之前在 matplotlib-user 邮件列表中询问过,所以对交叉帖子表示歉意。 假设我有一个点数已知的标记,我想画一个指向该点的箭头。我怎样才能得到箭头的终点?正如您在下面看到的,它与标记重叠。
我想使用 mpatches.FancyArrowPatch 绘制大量路径(单个图中有数百条路径)。我曾经使用 plt.arrow,但它使绘图窗口变得很慢,并且比补丁方法花费的时间更长。 无论如何,当我
我正在使用 python 和 matplotlib.pyplot 生成复杂的图形输出。我想将dotted线条样式与FancyArrowPatch结合使用,但未能做到这一点。 MWE: import m
我正在使用 python 和 matplotlib.pyplot 生成复杂的图形输出。我想将 dotted 线型与 FancyArrowPatch 结合使用,但没有成功。 MWE: import ma
我一直在尝试突破 matplotlib 补丁的界限,并指示它绘制一个圆形的 FancyArrowPatch,其中点上有一个方向箭头。这在我试图创建的网络表示中非常有用。 我使用 python 的编码时
我是一名优秀的程序员,十分优秀!