从零创建带正方形网格的K线图,适配江恩工具的库选型咨询
一、从零创建带正方形网格的K线图
用Matplotlib+Pandas就能从零实现,核心是让坐标轴比例为1:1,这样网格自然就是正方形。以下是完整代码:
import pandas as pd import matplotlib.pyplot as plt from matplotlib.patches import Rectangle # 生成示例K线数据(实际使用时可替换为真实行情数据) data = pd.DataFrame({ 'Open': [30, 32, 31, 33, 35], 'High': [32, 33, 32, 36, 37], 'Low': [29, 31, 30, 32, 34], 'Close': [32, 31, 33, 35, 36], }, index=pd.date_range('2024-01-01', periods=5)) # 创建画布,关键设置:坐标轴比例为1:1 fig, ax = plt.subplots(figsize=(10, 10)) ax.set_aspect('equal') # 让x、y轴单位长度一致,保证网格是正方形 # 逐根绘制K线 for idx_pos, (date, bar) in enumerate(data.iterrows()): # 确定K线颜色:收涨红,收跌绿 color = 'crimson' if bar['Close'] >= bar['Open'] else 'forestgreen' # 绘制K线实体 body_height = abs(bar['Close'] - bar['Open']) body_y = min(bar['Open'], bar['Close']) ax.add_patch(Rectangle((idx_pos - 0.3, body_y), 0.6, body_height, facecolor=color, edgecolor='black')) # 绘制上下影线 ax.plot([idx_pos, idx_pos], [bar['Low'], bar['High']], color='black') # 配置坐标轴 ax.set_xticks(range(len(data))) ax.set_xticklabels(data.index.strftime('%Y-%m-%d'), rotation=45) ax.set_ylabel('Price') ax.set_title('K线图(正方形网格)') # 添加正方形网格 ax.grid(True, linestyle='--', alpha=0.7) plt.tight_layout() plt.show()
如果用真实行情数据,建议把x轴换成交易日的序号(而非日期对象),这样更容易控制1:1的比例——因为日期轴的单位是时间,和价格轴的数值单位不好直接对齐,用序号作为x轴能更精准地实现正方形网格。
二、适合实现江恩工具的库选择
江恩45度角(时间=价格)、江恩正方形需要精准的坐标控制和自定义图形绘制能力,各库的适配性如下:
Bokeh → 最优选择
Bokeh的底层绘图API非常灵活,完全支持自定义直线、多边形、圆形等几何图形,能精准绘制江恩角度线、正方形网格。同时它的交互式特性(缩放、拖拽)很适合调整江恩工具的位置,而且可以轻松设置1:1的坐标轴比例,完美匹配江恩“时间=价格”的核心逻辑。
Plotly → 次优选择
Plotly支持添加自定义形状(直线、矩形),能快速实现江恩工具的绘制,也支持坐标轴比例调整。它的优势是自带丰富的交互功能,文档和社区资源也很充足,但自定义程度略逊于Bokeh。
mplfinance → 不推荐
mplfinance是专门做K线快速绘制的封装库,内置功能都是针对标准K线的,自定义几何图形的能力极差,很难精准控制江恩工具的位置和比例,不适合做这类需求。
bqplot → 仅限Jupyter环境
bqplot是Jupyter生态下的交互式绘图库,支持自定义标记和线条,也能控制坐标轴比例,但生态成熟度远不如Bokeh和Plotly,文档和案例较少,遇到问题很难找到解决方案。
cufflinks → 不推荐
cufflinks是Plotly的上层封装,主打简化金融绘图,但进一步限制了自定义能力,几乎无法实现复杂的江恩几何工具。
总结:优先选Bokeh;如果追求快速上手的交互式效果,选Plotly;静态绘图的话,用Matplotlib也能实现,但交互性差。
内容的提问来源于stack exchange,提问作者Alan Wong

