<p>在条形图中绘制箭头的一个选择就是填充。不过,这有点牵扯。我们需要创建一些自定义图案填充,如下所示:<a href="https://stackoverflow.com/questions/17285154/how-to-fill-a-polygon-with-a-custom-hatch-in-matplotlib">How to fill a polygon with a custom hatch in matplotlib?</a>在这里我们可以使用箭头的路径。在</p>
<p>因此,在下面,我们将<code>matplotlib.hatch.Shapes</code>子类化并创建一个箭头的路径。现在的问题是我们需要一些参数来插入到阴影中,以便能够定义角度。然后我们可以定义一个自定义的图案填充图案,我选择这样</p>
<pre><code>hatch="arr{angle}{size}{density}"
</code></pre>
<p>在哪里</p>
<ul>
<li>角度:0到360之间的整数</li>
<li>大小:2到20之间的整数</li>
<li>密度:一些整数>;=1</li>
</ul>
<p>这与我之前在<a href="https://stackoverflow.com/questions/48508793/fill-polygon-with-custom-hatch-with-matplotlib">this question</a>上的回答类似。
根据路径旋转的角度,大小和密度基本上决定了显示多少个箭头大小。注意,不是所有的参数看起来都很好,有些参数会导致图案填充重叠。在</p>
^{pr2}$
<p>带<code>{angle}{9}{3}</code>的输出:</p>
<p><a href="https://i.stack.imgur.com/4RXda.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/4RXda.png" alt="enter image description here"/></a></p>
<p>带<code>{angle}{11}{2}</code>的输出:</p>
<p><a href="https://i.stack.imgur.com/uY0dj.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/uY0dj.png" alt="enter image description here"/></a></p>
<p/><hr/>
下面是关于填充图案及其管理方式的说明。或者换句话说,<code>ArrowHatch</code>如何知道它应该创建一个图案填充?<br/>
将使用<code>matplotlib.hatch._hatch_types</code>内任何图案填充的顶点应用图案填充。这就是为什么我们需要将<code>ArrowHatch</code>类附加到这个列表中。根据这个类的属性<code>num_vertices</code>是否大于零,它将有助于最终的图案填充。这就是为什么我们在init函数中将其设置为<code>self.num_lines = 0</code>。但是,如果提供给<code>_hatch_types</code>列表中每个类的字符串<code>hatch</code>包含我们的匹配模式,那么我们将<code>self.num_rows</code>设置为0以外的值(对于形状,它应该是一个偶数,因为它们是在2个移位的行中生成的),这样它就有助于填充。<br/>
这个概念有点异国情调,因为基本上每个类本身都根据<code>hatch</code>字符串自行决定是否参与图案填充。一方面,这是非常方便的,因为它可以很容易地组合不同的图案填充类型,例如<code>"///++oo"</code>。另一方面,它使它很难用于图案填充,它需要一个输入参数,如本例中的角度。而且还需要注意不要在图案填充中使用任何字符,这是其他图案填充所使用的;例如,我最初想使用类似于<code>"arrow45.8,9,2"</code>的东西,因为<code>o</code>、<code>.</code>和{<cd17>}是其他有效的图案填充类型,因此结果会显示到处都是点。