han*_*Dev 0 python charts matplotlib
我正在寻找使用 matplotlib 将烛台的灯芯部分变成黑色?我在文档中找不到任何提及它的内容,但我已经看到图片示例表明它可以完成。
这是我目前拥有的:
这是灯芯被涂成黑色的示例:
更新:
我使用了下面提供的解决方案,但稍微更改了代码以删除烛台主体区域上的垂直线:
from matplotlib.lines import Line2D
from matplotlib.patches import Rectangle
def blackwickcandlestick(ax, quotes, width=0.2, colorup='#00FF00', colordown='#FF0000',
alpha=1.0, shadowCol='k', ochl=True):
OFFSET = width / 2.0
lines = []
patches = []
for q in quotes:
if ochl:
t, open, close, high, low = q[:5]
else:
t, open, high, low, close = q[:5]
if close >= open:
color = colorup
lower = open
height = close - open
vline = Line2D(
xdata=(t, t), ydata=(low, high),
color=colorup, # This changed from the default implementation
linewidth=0.5,
antialiased=True,
)
else:
color = colordown
lower = close
height = open - close
vline = Line2D(
xdata=(t, t), ydata=(low, high),
color=colordown, # This changed from the default implementation
linewidth=0.5,
antialiased=True,
)
rect = Rectangle(
xy=(t - OFFSET, lower),
width=width,
height=height,
facecolor=color,
edgecolor=color,
)
rect.set_alpha(alpha)
lines.append(vline)
patches.append(rect)
ax.add_line(vline)
ax.add_patch(rect)
ax.autoscale_view()
return lines, patches
import matplotlib.finance as mpl_finance
mpl_finance._candlestick = blackwickcandlestick
Run Code Online (Sandbox Code Playgroud)
重写完整的candlestick_ohlc似乎过于复杂。您只需迭代函数返回的行并将其颜色设置为黑色即可。您还可以设置zorder以使灯芯显示在框下方。
lines, patches = candlestick_ohlc(ax, quotes, width=0.5)
for line, patch in zip(lines, patches):
patch.set_edgecolor("k")
patch.set_linewidth(0.72)
patch.set_antialiased(False)
line.set_color("k")
line.set_zorder(0)
Run Code Online (Sandbox Code Playgroud)
如果要在脚本中经常使用它,当然可以将其放在函数中。
def candlestick_ohlc_black(*args,**kwargs):
lines, patches = candlestick_ohlc(*args,**kwargs)
for line, patch in zip(lines, patches):
patch.set_edgecolor("k")
patch.set_linewidth(0.72)
patch.set_antialiased(False)
line.set_color("k")
line.set_zorder(0)
candlestick_ohlc_black(ax, quotes, width=0.5)
Run Code Online (Sandbox Code Playgroud)