[英]Adding threshold lines in financial plots in plotly in python
I am plotting financial subplots in Plotly in python which I am able to successfully.我正在用 python 在 Plotly 中绘制财务子图,我能够成功。 But I need threshold lines (horizontal lines) to be plotted in the second sub plot but not able to d the same.但我需要在第二个子图中绘制阈值线(水平线),但不能绘制相同的线。
But I am able to plot threshold lines successfully in a standalone plot.但我能够在一个独立的情节中成功地绘制阈值线。
My code for standalone plot with three threshold lines我的独立绘图代码具有三个阈值线
fig = go.Figure(data=[go.Scatter(x=VipData['Date'], y=VipData['RSI5'], name='RSI5')])
fig.update_layout(
title='VIP Stock',
yaxis_title='Price',
xaxis_title='Period',
shapes=[# Top Threshold line
{
'type': 'line',
'xref': 'paper',
'x0': 0,
'y0': 70, # use absolute value or variable here
'x1': 1,
'y1': 70, # ditto
'line': {
'color': 'rgb(0, 100, 0)',
'width': 1,
'dash': 'dash',
},
},
# Bottom Threshold Line
{
'type': 'line',
'xref': 'paper',
'x0': 0,
'y0': 30, # use absolute value or variable here
'x1': 1,
'y1': 30, # ditto
'line': {
'color': 'rgb(255, 0, 0)',
'width': 1,
'dash': 'dash',
},
},
# Middle Threshold Line
{
'type': 'line',
'xref': 'paper',
'x0': 0,
'y0': 50, # use absolute value or variable here
'x1': 1,
'y1': 50, # ditto
'line': {
'color': 'rgb(0, 0, 0)',
'width': 1,
'dash': 'dash',
},
},
],
xaxis=dict(
rangeselector=dict(
buttons=list([
dict(count=1,
label="1m",
step="month",
stepmode="backward"),
dict(count=6,
label="6m",
step="month",
stepmode="backward"),
dict(count=1,
label="YTD",
step="year",
stepmode="todate"),
dict(count=1,
label="1y",
step="year",
stepmode="backward"),
dict(step="all")
])
),
rangeslider=dict(
visible=True
),
type="date"
)
)
fig.show()
Below is the code for my subplots:下面是我的子图的代码:
fig = make_subplots(
rows=2, cols=1,
shared_xaxes=True,
vertical_spacing=0.01,
specs=[[{"type": "Candlestick"}],
[{"type": "scatter"}]]
)
fig.add_trace(go.Candlestick(x=VipData['Date'].tail(30), open=VipData['Open'].tail(30), high=VipData['High'].tail(30),
low=VipData['Low'].tail(30), close=VipData['Close'].tail(30), name='Candlestick'),row=1, col=1)
fig.add_trace(go.Scatter(x=VipData['Date'].tail(30), y=VipData['RSI5'].tail(30), name='RSI5'),row=2, col=1)
fig.update_layout(xaxis_rangeslider_visible=False)
What changes should I make to my code to plot similar three threshold lines to my second plot ie plot in the row 2.我应该对我的代码进行哪些更改以绘制与我的第二个图(即第 2 行中的图)相似的三个阈值线。
Appreciating your time and guidance.感谢您的时间和指导。
Adding the plot created as per the code shared by @As11添加根据 @As11 共享的代码创建的图
Sample Data样本数据
Index Date Open High Low Close Volume RSI5 RSI7 RSI14 RSI20
4629 2021-02-24 381.899994 396.500000 366.200012 384.000000 432314 70.793970 68.529922 62.909907 60.583804
4630 2021-02-25 388.799988 403.500000 385.049988 391.799988 595109 78.694615 74.588730 66.485293 63.246338
4631 2021-02-26 389.950012 414.950012 381.000000 400.700012 1657646 84.626277 79.772785 70.034771 66.004475
4632 2021-03-01 409.399994 412.500000 396.000000 406.149994 1564155 87.327001 82.345797 71.990981 67.573037
4633 2021-03-02 408.350006 412.799988 396.049988 398.000000 974849 65.739595 67.389979 65.142286 62.997502
4634 2021-03-03 402.700012 418.000000 396.799988 408.549988 601591 75.528227 74.409265 69.223823 66.123166
4635 2021-03-04 410.000000 422.000000 406.799988 409.950012 1203652 76.635561 75.234577 69.730348 66.518241
4636 2021-03-05 416.799988 417.899994 400.950012 411.399994 757044 77.928511 76.163442 70.275987 66.938582
4637 2021-03-08 416.399994 416.399994 405.600006 409.299988 474313 70.832312 71.624317 68.354198 65.681480
4638 2021-03-09 412.500000 412.500000 400.100006 402.899994 447689 52.589322 59.100838 62.724568 61.949272
4639 2021-03-10 405.000000 405.000000 397.799988 401.000000 374909 48.001544 55.726081 61.115323 60.868426
4640 2021-03-12 403.000000 406.750000 390.000000 392.850006 387427 32.704021 43.340983 54.639686 56.423455
4641 2021-03-15 391.500000 392.000000 379.049988 384.200012 351942 22.985685 33.987634 48.737186 52.167366
4642 2021-03-16 386.500000 387.149994 376.450012 379.899994 398165 19.402892 30.206902 46.072717 50.186440
4643 2021-03-17 375.350006 388.899994 373.049988 380.450012 812165 21.362683 31.346550 46.475797 50.439827
4644 2021-03-18 387.000000 387.000000 366.250000 372.399994 282166 14.785330 24.512076 41.577488 46.774263
4645 2021-03-19 373.000000 381.250000 370.000000 376.250000 394137 28.032068 32.699461 44.585582 48.652822
4646 2021-03-22 379.750000 380.950012 371.000000 375.399994 257526 26.878940 31.810773 44.046361 48.256999
4647 2021-03-23 372.149994 382.000000 372.000000 373.149994 234016 23.658731 29.347633 42.578426 47.187317
4648 2021-03-24 373.149994 376.950012 361.000000 367.399994 571290 17.110434 23.843211 39.001213 44.531932
4649 2021-03-25 365.399994 366.750000 352.250000 357.299988 292795 10.642696 17.223262 33.652906 40.335152
4650 2021-03-26 363.500000 363.500000 348.000000 350.299988 260489 8.017250 14.065566 30.528256 37.740355
4651 2021-03-30 351.049988 356.950012 338.700012 347.250000 367289 7.067658 12.866452 29.253742 36.658738
4652 2021-03-31 349.000000 357.250000 347.500000 354.149994 248493 30.384842 28.871121 35.785243 40.705512
4653 2021-04-01 357.000000 361.200012 351.000000 354.450012 192683 31.321411 29.527758 36.061654 40.878392
4654 2021-04-05 354.450012 354.450012 339.000000 342.200012 275972 18.570212 20.508825 30.322389 36.326258
4655 2021-04-06 345.000000 348.799988 340.000000 343.399994 237563 22.436682 23.190015 31.472914 37.049091
4656 2021-04-07 343.700012 347.350006 340.200012 342.500000 232796 21.480478 22.525218 31.058690 36.719996
4657 2021-04-08 345.750000 347.000000 341.399994 343.600006 255827 26.280462 25.567863 32.232666 37.434998
4658 2021-04-09 345.399994 345.500000 340.000000 341.000000 144333 22.259995 23.069502 30.893569 36.411390
I was unable to reproduce your graph as I do not have the data that you are using, but with what I was able to figure out, you should be able to get the threshold lines by doing the same thing that you did in the standalone plot.我无法重现您的图表,因为我没有您正在使用的数据,但据我所知,您应该能够通过执行与独立 plot 中相同的操作来获得阈值线. So the complete code should look something like this:所以完整的代码应该是这样的:
fig = make_subplots(
rows=2, cols=1,
shared_xaxes=True,
vertical_spacing=0.01,
specs=[[{"type": "Candlestick"}],
[{"type": "scatter"}]]
)
fig.add_trace(go.Candlestick(x=VipData['Date'].tail(30), open=VipData['Open'].tail(30), high=VipData['High'].tail(30),
low=VipData['Low'].tail(30), close=VipData['Close'].tail(30), name='Candlestick'),row=1, col=1)
fig.add_trace(go.Scatter(x=VipData['Date'].tail(30), y=VipData['RSI5'].tail(30), name='RSI5'),row=2, col=1)
fig.update_layout(xaxis_rangeslider_visible=False)
fig.update_layout(
title='VIP Stock',
yaxis_title='Price',
xaxis_title='Period',
shapes=[# Top Threshold line
{
'type': 'line',
'xref': 'paper',
'yref': 'y2',
'x0': 0,
'y0': 70, # use absolute value or variable here
'x1': 1,
'y1': 70, # ditto
'line': {
'color': 'rgb(0, 100, 0)',
'width': 1,
'dash': 'dash',
},
},
# Bottom Threshold Line
{
'type': 'line',
'xref': 'paper',
'yref': 'y2',
'x0': 0,
'y0': 30, # use absolute value or variable here
'x1': 1,
'y1': 30, # ditto
'line': {
'color': 'rgb(255, 0, 0)',
'width': 1,
'dash': 'dash',
},
},
# Middle Threshold Line
{
'type': 'line',
'xref': 'paper',
'yref': 'y2',
'x0': 0,
'y0': 50, # use absolute value or variable here
'x1': 1,
'y1': 50, # ditto
'line': {
'color': 'rgb(0, 0, 0)',
'width': 1,
'dash': 'dash',
},
},
],
xaxis=dict(
rangeselector=dict(
buttons=list([
dict(count=1,
label="1m",
step="month",
stepmode="backward"),
dict(count=6,
label="6m",
step="month",
stepmode="backward"),
dict(count=1,
label="YTD",
step="year",
stepmode="todate"),
dict(count=1,
label="1y",
step="year",
stepmode="backward"),
dict(step="all")
])
),
rangeslider=dict(
visible=True
),
type="date"
)
)
fig.show()
To show it on the second subplot, you must add 'yref':'y2'
in each of your line shapes as seen in the code above.要在第二个子图中显示它,您必须在每个线条形状中添加'yref':'y2'
,如上面的代码所示。
If you use Plotly Studio you can very easily create shapes that will draw whatever threshold shape you need.如果您使用 Plotly Studio,您可以非常轻松地创建形状,以绘制您需要的任何阈值形状。 You need to create an account if you want do download the JSON but this free if you save the graph as public.如果您想下载 JSON,则需要创建一个帐户,但如果您将图表保存为公开,则此帐户是免费的。
You can also just view the JSON tree and get the shape for you code from there if you don't want to create an account:如果您不想创建帐户,也可以只查看 JSON 树并从那里获取代码的形状:
https://chart-studio.plotly.com/ https://chart-studio.plotly.com/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.