箭头图 - 将柱状图更改为形状

1 投票
2 回答
1586 浏览
提问于 2025-04-18 13:00

我想制作一个箭头图,像这样:

http://peltiertech.com/WordPress/arrow-charts-in-excel/

我知道怎么制作堆叠条形图,但在箭头的部分遇到了困难。

有没有人知道怎么把箭头(或者三角形)放进条形图里?我也考虑过用蜡烛图,但不知道怎么用箭头(或者三角形)。

我想通过向上和向下的箭头(或者三角形)来显示变化,如果变化是正的就用向上的箭头,负的就用向下的箭头。

任何建议都很感谢。谢谢!

2 个回答

0

稍微修改一下这里的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()

箭头图表示例

1

我会通过画箭头来实现这个效果,可能还会配合柱状图,具体看你想要的效果是什么。比如,假设我有一些数据,表示某个变量 y 及其变化量 dy,这些数据可以用一对对的形式表示,像这样 (y,dy)。然后可以用 if/else 来选择颜色。接着,我会为每一对 ydydata 中画一个箭头。

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 的位置。你可以调整线条的宽度和箭头的宽度,来达到你想要的效果。

撰写回答