matplotlib 箭头图-将条形图更改为形状

hxzsmxv2  于 2023-10-24  发布在  其他
关注(0)|答案(2)|浏览(111)

我试着创建一个箭头图,如下所示:
http://peltiertech.com/WordPress/arrow-charts-in-excel/
我知道如何创建一个堆叠条形图什么的,但我被困在箭头方面。
有人知道如何将箭头(或三角形)转换为条形图吗?我也想过使用烛台图-但我不知道如何使用箭头(或三角形)。
我试图通过使用向上和向下箭头(或向上和向下三角形)来显示变化,如果变化分别是正/负的。
感谢您的任何建议。谢谢!

0md85ypi

0md85ypi1#

我会通过画箭头来实现这一点,根据所需的效果,可能会沿着一个条形图。例如,假设我有某个变量y及其变化dy的数据,作为元组(y,dy)if/else可用于选择颜色。然后我为data中的每对ydy绘制一个箭头。

data=[(.5,.5),(.8,.4),(.2,-.1)]
clrs=['green','red']
for i in range(len(data)):
    y,dy=data[i]
    if dy>0:
        c=clrs[0]
    else:
        c=clrs[1]
    arrow(i,y,0,dy,color=c,length_includes_head=True,lw=2,width=.002)

xlim(-.5,2.5)
ylim(0,2)
grid()

我添加了网格,这样你就可以看到,当length_includes_head参数设置为true时,箭头的尖端在y+dy的末尾结束。

vqlkdk9b

vqlkdk9b2#

稍微修改一下这里的python代码,这样我们就可以制作一个简单的带注解的箭头图了。希望对大家有帮助。

import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(10,6))
data=[('A',.5,.5),('B',.8,.4),('C',.2,-.1)]
clrs=['green','red']
for i in range(len(data)):
    txt,y,dy=data[i]
    if dy>0:
        c=clrs[0]
    else:
        c=clrs[1]
    ax.arrow(i,y,0,dy,color=c,length_includes_head=False,lw=2,head_width=0.05, 
head_length=0.05, width=0.01, fc=c,ec=c)
    ax.annotate(txt, xy=(i, y-dy/6),fontsize=18, 
horizontalalignment='center',verticalalignment= 'center')
plt.xlim(-.5,2.5)
plt.ylim(0,2)
plt.grid()

相关问题