matplotlib 蜡烛图柱/框/宽度/间距
我正在使用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