You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现从自定义选中价格交互式绘制水平线及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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 07:07:17