如何实现从自定义选中价格交互式绘制水平线及x%比例线的功能?
实现鼠标选价绘制水平线及百分比偏移线的方案
下面是基于Python + Matplotlib的实现代码,支持鼠标点击选中价格后绘制水平线,同时生成该价格指定百分比偏移的第二条线,且允许多次重复操作:
import matplotlib.pyplot as plt # 可配置参数:偏移百分比(正为向上偏移,负为向下偏移) OFFSET_PERCENT = 5 # 示例:5%偏移 def on_mouse_click(event): # 仅处理鼠标左键点击,且点击在绘图区域内 if event.button == 1 and event.inaxes is not None: # 获取点击位置的价格(y轴数值) selected_price = event.ydata # 计算偏移后的价格 offset_price = selected_price * (1 + OFFSET_PERCENT / 100) # 绘制选中价格的水平线(射线形式,从点击x位置延伸到右侧) event.inaxes.axhline(y=selected_price, xmin=event.xdata/event.inaxes.get_xlim()[1], xmax=1, color='red', linewidth=1.5) # 绘制偏移价格的水平线 event.inaxes.axhline(y=offset_price, xmin=event.xdata/event.inaxes.get_xlim()[1], xmax=1, color='green', linewidth=1.5) # 添加价格标签,方便识别 event.inaxes.text(event.xdata, selected_price, f'{selected_price:.2f}', ha='left', va='bottom', bbox=dict(facecolor='white', alpha=0.8)) event.inaxes.text(event.xdata, offset_price, f'{offset_price:.2f} ({OFFSET_PERCENT:+d}%)', ha='left', va='bottom', bbox=dict(facecolor='white', alpha=0.8)) # 更新绘图 plt.draw() # 初始化示例数据(替换成你的实际价格数据) x = range(1, 21) y = [100 + i*2 + (i%3)*5 for i in x] # 创建绘图窗口 fig, ax = plt.subplots() ax.plot(x, y, label='价格走势') ax.set_xlabel('时间') ax.set_ylabel('价格') ax.legend() ax.grid(True) # 绑定鼠标点击事件 fig.canvas.mpl_connect('button_press_event', on_mouse_click) # 显示绘图 plt.show()
代码说明:
- 点击绘图区域内的任意价格点,会自动在该价格位置绘制红色水平线(从点击位置向右延伸),同时在该价格
OFFSET_PERCENT百分比偏移位置绘制绿色水平线 - 每条线都会标注对应的价格数值和偏移比例,方便直观查看
- 可通过修改
OFFSET_PERCENT参数调整偏移比例,正数为向上偏移,负数为向下偏移 - 支持多次点击,每次点击都会生成一组新的水平线,不会覆盖之前的绘制结果
如果需要绘制垂直射线(从价格点向上/向下延伸),只需调整axhline为axvline并修改对应参数即可,核心交互逻辑保持一致。
内容的提问来源于stack exchange,提问作者sey eeet
相关产品推荐
相关产品推荐

