matplotlib 蜡烛图柱/框/宽度/间距

3 投票
1 回答
2415 浏览
提问于 2025-04-17 19:50

我正在使用matplotlib来绘制蜡烛图。

[问题] 默认设置下,高低线会穿过开盘和收盘的框。我希望开盘和最低价的框能“在”这条线的上面,这样我只看到高价和(开盘价、收盘价)中的最大值之间的线,以及(开盘价、收盘价)中的最小值和低价之间的线。这样可以吗?怎么做?

我自己找到了答案,所以把我的发现和原问题一起发出来,希望能帮助到其他人。

做到这一点的唯一方法是重写candlestick()函数,让它画两条线而不是一条。我有一些示例代码可以做到这一点。如果有更好的方法,我也很乐意听听。

def fooCandlestick(ax, quotes, width=0.5, colorup='k', colordown='r', 
                   alpha=1.0):
    OFFSET = width/2.0

    lines = []
    boxes = []
    for q in quotes:
        t, op, cl, hi, lo = q[:5]

        box_h = max(op, cl)
        box_l = min(op, cl)
        height = box_h - box_l

        if cl>=op:
            color = colorup
        else:
            color = colordown

        vline_lo = Line2D(
            xdata=(t, t), ydata=(lo, box_l),
            color = 'k',
            linewidth=0.5,
            antialiased=True,
        )
        vline_hi = Line2D(
            xdata=(t, t), ydata=(box_h, hi),
            color = 'k',
            linewidth=0.5,
            antialiased=True,
        )
        rect = Rectangle(
            xy = (t-OFFSET, box_l),
            width = width,
            height = height,
            facecolor = color,
            edgecolor = color,
        )
        rect.set_alpha(alpha)
        lines.append(vline_lo)
        lines.append(vline_hi)
        boxes.append(rect)
        ax.add_line(vline_lo)
        ax.add_line(vline_hi)
        ax.add_patch(rect)
    ax.autoscale_view()

    return lines, boxes

[问题] matplotlib支持设置蜡烛的宽度和每根蜡烛之间的间距吗?

谢谢。

1 个回答

1

我不太确定间距的问题,不过:

  • 你可以通过在 candlestick 函数里使用 alpha 参数来设置盒子的透明度。1 表示完全不透明。
  • 你可以通过 width 参数来设置宽度,具体单位我不太清楚,你可以自己试试。

比如:

candlestick(ax, quotes, width=0.5, alpha=1.0)

哦,这个答案提到了一种方法,通过在蜡烛图之间添加空数据来增加蜡烛图之间的间距,算是一种小技巧:https://stackoverflow.com/a/9713447/1730674

撰写回答