我试图创建一个条形图,其中的条形图通过让条内的箭头指向基点来包含其他信息。在
现在,我只能用彩色条创建一个。因为方向需要8种颜色加上一种不存在的颜色,这并不像我希望的那样好。也有区分颜色的困难。在
import matplotlib.pyplot as plt
import numpy as np
x = range(12)
y_bar = np.random.random(12)
colors = ['green', 'yellow', 'blue', 'pink', 'orange']
bar_cols = [ colors[int(b*100) % len(colors)] for b in y_bar]
plt.bar(x, y_bar, color=bar_cols)
plt.show()
因此,箭头指向一个由单独变量提供的方向,是直观和容易看到的。在
我不知道怎么做。我已经尝试过使用图案填充,但似乎只有有限的一组符号。在
有没有办法在酒吧里放些箭?在
编辑: 这是一个pciture,它看起来像什么,我要的是什么。箭头的形状可以不同。当然,预计还会有更多的支柱。由于任务数据的原因,甚至有一些没有箭头。 barchar with arrows
在条形图中绘制箭头的一个选择就是填充。不过,这有点牵扯。我们需要创建一些自定义图案填充,如下所示:How to fill a polygon with a custom hatch in matplotlib?在这里我们可以使用箭头的路径。在
因此,在下面,我们将
matplotlib.hatch.Shapes
子类化并创建一个箭头的路径。现在的问题是我们需要一些参数来插入到阴影中,以便能够定义角度。然后我们可以定义一个自定义的图案填充图案,我选择这样在哪里
这与我之前在this question上的回答类似。 根据路径旋转的角度,大小和密度基本上决定了显示多少个箭头大小。注意,不是所有的参数看起来都很好,有些参数会导致图案填充重叠。在
^{pr2}$带
{angle}{9}{3}
的输出:带
{angle}{11}{2}
的输出:下面是关于填充图案及其管理方式的说明。或者换句话说,
ArrowHatch
如何知道它应该创建一个图案填充?将使用
matplotlib.hatch._hatch_types
内任何图案填充的顶点应用图案填充。这就是为什么我们需要将ArrowHatch
类附加到这个列表中。根据这个类的属性num_vertices
是否大于零,它将有助于最终的图案填充。这就是为什么我们在init函数中将其设置为self.num_lines = 0
。但是,如果提供给_hatch_types
列表中每个类的字符串hatch
包含我们的匹配模式,那么我们将self.num_rows
设置为0以外的值(对于形状,它应该是一个偶数,因为它们是在2个移位的行中生成的),这样它就有助于填充。这个概念有点异国情调,因为基本上每个类本身都根据
hatch
字符串自行决定是否参与图案填充。一方面,这是非常方便的,因为它可以很容易地组合不同的图案填充类型,例如"///++oo"
。另一方面,它使它很难用于图案填充,它需要一个输入参数,如本例中的角度。而且还需要注意不要在图案填充中使用任何字符,这是其他图案填充所使用的;例如,我最初想使用类似于"arrow45.8,9,2"
的东西,因为o
、.
和{这里有一个解决方案,它使用
ax.annotate
在每个条内绘制箭头。由于OP不太清楚箭头应该是什么样子,所以我把每个条分成矩形(在代码中我称它们为squares
,但如果你确定了绘图的纵横比,它们就只是正方形),并为每个矩形绘制了一个中心箭头,其方向由用户提供的角度给出(这里是一个称为wind_direction
)。在在代码中,我将
Axes
的纵横比设置为x
-和y
-极限的纵横比,这使得Axes
呈正方形,因此可以轻松绘制长度相同的箭头,而不受其方向的影响。如果不需要,可以注释掉相应的行。如果箭头的长度必须相同而不受限制,则必须计算图形的纵横比,例如请参见here如何进行此操作。在我还用度数标注了每个条上的风向,以便检查箭头是否与给定的风向一致。在
最终结果如下:
希望这有帮助。在
相关问题 更多 >
编程相关推荐