如何使用plotly绘制枢轴点?

我正在使用plotly 绘制一些带有SMA 和MACD 数据的图表。这很好用。


fig = make_subplots(vertical_spacing = 0, rows=3, cols=1, row_heights=[0.6, 0.2, 0.2])


fig.add_trace(go.Ohlc(x=data['timestamp'],

            open=data['open'],

            high=data['high'],

            low=data['low'],

            close=data['close']))


fig.add_trace(go.Scatter(x=data['timestamp'], y=data['sma'], line=dict(color='orange', width=1)), row=1, col=1)



fig.add_trace(go.Scatter(x=data['timestamp'], y = data['macd']), row=2, col=1)

fig.add_trace(go.Scatter(x=data['timestamp'], y = data['macds']*1.1), row=2, col=1)

fig.add_trace(go.Bar(x=data['timestamp'], y = data['volume']), row=3, col=1)

fig.update_layout(xaxis_rangeslider_visible=False,

                xaxis=dict(zerolinecolor='black', showticklabels=False),

                xaxis2=dict(showticklabels=False))


fig.update_xaxes(showline=True, linewidth=1, linecolor='black', mirror=False)

fig.show()

但现在我想添加枢轴:


    last_day['Pivot'] = (last_day['High'] + last_day['Low'] + last_day['Close'])/3

    last_day['R1'] = 2*last_day['Pivot'] - last_day['Low']

    last_day['S1'] = 2*last_day['Pivot'] - last_day['High']

    last_day['R2'] = last_day['Pivot'] + (last_day['High'] - last_day['Low'])

    last_day['S2'] = last_day['Pivot'] - (last_day['High'] - last_day['Low'])

    last_day['R3'] = last_day['Pivot'] + 2*(last_day['High'] - last_day['Low'])

    last_day['S3'] = last_day['Pivot'] - 2*(last_day['High'] - last_day['Low'])

last_day 的输出如下所示:


                    Timestamp      Open      High       Low     Close  Volume    Pivot        R1        S1        R2        S2        R3        S3

499  2020-10-11T14:45:00.000Z  0.000321  0.000321  0.000319  0.000319  886.17  0.00032  0.000321  0.000319  0.000322  0.000318  0.000323  0.000316

如何将此数据(枢轴、S1、S2、S3...)添加到我的图表中?我想要与这里的图片类似的东西:https://www.fxpivot-points.com/?page =4

https://img1.sycdn.imooc.com/65410127000170b406520471.jpg

我试过这个:

fig.add_trace(go.Scatter(x=last_day['Timestamp'], y=last_day['Pivot'], line=dict(color='purple', width=1)), row=1, col=1)

但它只画了一个点,因为我只提供了一个时间戳。我怎样才能把它变成一条水平线?


冉冉说
浏览 75回答 1
1回答

慕容3067478

您特别要求仅绘制最后一天的计算点,并在您拥有烛台图的整个时间段内显示它们。如果这实际上是您想要实现的目标,那么下面的代码片段将生成以下绘图,其中使用 和fig.add_shapes()分别fig.add_annotations()显示水平线和枢轴点名称。如果有什么地方不太对劲,请告诉我,我们可以讨论进一步的调整。阴谋:基于Apple示例数据的完整代码:import plotly.graph_objects as goimport pandas as pdfrom datetime import datetimedf = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv').tail(5)fig = go.Figure(data=[go.Candlestick(x=df['Date'],                open=df['AAPL.Open'],                high=df['AAPL.High'],                low=df['AAPL.Low'],                close=df['AAPL.Close'])])last_day = df.iloc[-1].to_frame().Tlast_day = last_day.rename(columns = lambda x: x.replace('AAPL.', ''))not_pivots = list(last_day.columns)last_day['Pivot'] = (last_day['High'] + last_day['Low'] + last_day['Close'])/3last_day['R1'] = 2*last_day['Pivot'] - last_day['Low']last_day['S1'] = 2*last_day['Pivot'] - last_day['High']last_day['R2'] = last_day['Pivot'] + (last_day['High'] - last_day['Low'])last_day['S2'] = last_day['Pivot'] - (last_day['High'] - last_day['Low'])last_day['R3'] = last_day['Pivot'] + 2*(last_day['High'] - last_day['Low'])last_day['S3'] = last_day['Pivot'] - 2*(last_day['High'] - last_day['Low'])last_daypivots = [n for n in last_day.columns if n not in not_pivots]pcols = ['green', 'blue', 'blue', 'red', 'red', 'black', 'black']for i, col in enumerate(pivots):    # horizontal lines    fig.add_shape(type="line",                    x0=df['Date'].iloc[0],                    y0=last_day[col].iloc[-1],                    x1=df['Date'].iloc[-1],                    y1=last_day[col].iloc[-1],                    line=dict(                        color=pcols[i],                        width=1,                        #dash="dashdot",                    ),)        # line annotations    fig.add_annotation(dict(font=dict(color=pcols[i],size=12),                                        x=df['Date'].iloc[0],                                        y=last_day[col].iloc[0],                                        showarrow=False,                                        text=col,                                        textangle=0,                                        xanchor='right',                                        xref="x",                                        yref="y"))fig.show()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python