Python中的锯齿线

Posted

技术标签:

【中文标题】Python中的锯齿线【英文标题】:Zigzag Line in Python 【发布时间】:2019-03-06 15:12:01 【问题描述】:

我正在尝试在另一条线上绘制 ZigZag 线。我的基准线(价格)有最高点和最低点。我正在尝试用一条线连接顶部和底部点。这是一个例子:

这是我的数据集:

这就是我能走多远:

感谢任何帮助。

编辑 1:

这是我不工作的代码:

trend_index = target_out.columns.get_loc("trend_shifted")
close_index = target_out.columns.get_loc("price_close")

for i in range(1, len(target_out)):
       if target_out.iloc[i, trend_index] == target_out.iloc[i-1, trend_index] and target_out.iloc[i-1, trend_index] is not None:
            target_out.iloc[i, trend_index] = np.nan
            target_out.iloc[i-1, trend_index] = target_out.iloc[i-1, close_index]

# multiple line plot
plt.plot( 'ind', 'price_close', data=target_out, marker='o', markerfacecolor='blue', markersize=12, color='skyblue', linewidth=4)
plt.plot( 'ind', 'trend_shifted', data=target_out, marker='', color='olive', linewidth=2)
plt.legend()

trend_shifted 列有oneszeros。连续 1 和 0 的第一个元素实际上是之字形的顶部和底部点。其余的点并不重要。确定了最高点和最低点后,我需要画一条线,但由于价格和趋势的值相对不同,图表是不平衡的(我的意思是,价格像 0.00001 但趋势是 0 和 1)

编辑 2:

@rgk 的代码有效。这是输出:

【问题讨论】:

你能分享一个代码示例吗? @rgk 当然,你需要什么部分?我的尝试? 最主要的是,当您应该绘制两次价格时,您似乎正试图在同一轴上绘制两个系列 - 请参阅下面的答案 有点跑题了,但请您分享一下您是如何制作趋势转移专栏的? 如何获得之字形值?我正在做类似的事情,如果您有任何想法,请告诉我! ***.com/questions/63164124/… 【参考方案1】:

虽然由于没有给出代码示例,这对您来说可能并不完美,但我认为使用掩码数组并将其与索引分开绘制将完成您正在寻找的内容:

df = pd.DataFrame('price_close': np.random.uniform(low=1.186e-05, high=1.255e-05, size=9),
                   'trend_shifted': [bool(random.getrandbits(1)) for x in range(1, 10)])

df['trend_plot'] = [np.nan] + [df.price_close[i] if df.trend_shifted[i] != df.trend_shifted[i-1] else np.nan for i in range(1, len(df))]
mask = np.isfinite(df.trend_plot)

plt.plot(df.index, df.price_close, linestyle='-', marker='o')
plt.plot(df.index[mask], df.trend_plot[mask], linestyle='-', marker='o')
plt.show()

【讨论】:

感谢您的代码。您的屏蔽代码完全符合我的尝试,但结果与原来的锯齿形不同。是因为它是随机生成的吗?我会用我的数据试试你的代码 是的 - 我的示例中的 trend_shifted 数据是随机生成的。没想到我弄清楚逻辑会帮助您解决问题。很高兴听到您身体状况良好!

以上是关于Python中的锯齿线的主要内容,如果未能解决你的问题,请参考以下文章

给定一组线中的平行线数

idea单元测试左侧装订线中的颜色指示器设置

使用剪辑路径从圆圈中的 4 条 svg 线中删除 37px

画布中的抗锯齿大文本

游戏中的抗锯齿杂谈

CALayer 中的抗锯齿绘图