更改Matplotlib Streamplot箭头的FaceColor和EdgeColor

时间:2014-08-17 13:37:53

标签: python numpy matplotlib

我在网格中有一些数据,我用streamplot绘制流线图,颜色和宽度与速度有关。如何更改箭头的颜色,或仅更改边缘颜色? 我的目标是强调流方向。如果有人有另一种方法可以做到这一点..

我尝试使用c.arrows,编辑c.arrows.set_edgecolorc.arrows.set_edgecolorsc.arrows.set_facecolorc.arrows.set_facecolors,但即使我跑{{1}也没有发生任何事情}}

图: The Result of the code

代码:

plt.draw()

1 个答案:

答案 0 :(得分:3)

(注意,下面的分析可能不完全正确,我只是粗略地看一下来源。)

似乎streamplot在创建箭头时会做两件事:

  • 将箭头补丁(类型FancyArrowPatch)添加到轴
  • 将相同的箭头修补程序添加到PatchCollectionc.arrows

出于某种原因(我猜这个正确的缩放是在这背后),似乎没有使用该集合,也没有添加到轴上。因此,如果更改集合的颜色映射或颜色,则它对绘图没有影响。

可能有更美妙的方法可以做到这一点,但如果你想要,例如,黑色箭头进入你的情节,你可以这样做:

import matplotlib.patches

# get the axes (note that you should actually capture this when creating the subplot)
ax = plt.gca()

# iterate through the children of ax
for art in ax.get_children():
    # we are only interested in FancyArrowPatches
    if not isinstance(art, matplotlib.patches.FancyArrowPatch):
        continue
    # remove the edge, fill with black
    art.set_edgecolor([0, 0, 0, 0])
    art.set_facecolor([0, 0, 0, 1])
    # make it bigger
    art.set_mutation_scale(30)
    # move the arrow head to the front
    art.set_zorder(10)

这会创建:

enter image description here

然后是通常的警告:这是丑陋和脆弱的。