在遍历 pandas 数据框的日期范围之间绘制水平线
Plot horizontal lines between date ranges iterating through pandas dataframe
我基本上有两个不同的数据框,一个用于计算每周数据 (df),第二个 (df1) stock/crypto 的绘图值。在 df 上,我使用每周创建了一个 pandas 列 'pivot' ((open+high+low)/3)数据以创建一组包含每周枢轴值的值。
现在我想将这些每周数据(作为线条)绘制到具有每日数据的 df1 上。因此 x1 将是一周的开始,x2 将是一周的结束。 y 值是 df(每周)的枢轴值。
Here is what I would want it to look like:
我的方法和问题:
首先,我是Python的初学者,这是我学习的第二个月。如果之前有人问过这个问题,我深表歉意。
我知道可以使用单个数据框和 pandas 分组来计算枢轴值,但我想在这完成后解决这个问题,所以如果你正在接近这个,这两种方法都应该没问题问题。我想要的是带有 OHLC 烛台的最后几行。我想使用 Plotly OHLC and go Shapes 绘制这些结果。我所坚持的是遍历枢轴每周数据框,并将这些线作为轨迹添加到 OHLC 数据每日数据之上。
到目前为止,这是我的代码:
import yfinance as yf
import pandas as pd
import numpy as np
import plotly.express as px
import plotly.graph_objects as go
from datetime import datetime, timedelta
df = yf.download( tickers = 'BTC-USD',
start = '2021-08-30',
end = datetime.today().strftime('%Y-%m-%d'),
interval = '1wk',
group_by = 'ticker',
auto_adjust = True).reset_index()
#daily df for plot
df2 = yf.download( tickers = 'BTC-USD',
start = '2021-08-30',
end = datetime.today().strftime('%Y-%m-%d'),
interval = '1d',
group_by = 'ticker',
auto_adjust = True).reset_index()
#small cap everything
df = df.rename(columns={'Date':'date',
'Open': 'open',
'High': 'high',
'Low' : 'low',
'Close' : 'close'})
df['pivot'] = (df['high']+ df['low'] + df['close'])/3
result = df.copy()
fig = go.Figure(data = [go.Candlestick(x= df['date'],
open = df['open'],
high = df['high'],
low = df['low'],
close = df['close'],
name = 'Price Candle')])
这将用于绘制直到烛台 OHLC,然而,其余的迭代让我感到困扰。您可以将其绘制在折线图或 OHLC 图表上并对其进行迭代。
fig = px.line(df, x='time', y='close')
result = df.copy()
for i, pivot in result.iterrows():
fig.add_shape(type="line",
x0=pivot.date, y0=pivot, x1=pivot.date, y1=pivot,
line=dict(
color="green",
width=3)
)
fig
当我打印这个时,没有枢轴线以我希望的方式出现。Only the original price line graph shows
提前感谢您到目前为止花时间阅读本文。
创建线段有两种方法:添加形状或在散点图上使用线模式。我认为散点图的线模式更有优势,因为它允许更详细的设置。对于dataframe,在line-by-line的基础上引入一个循环过程,利用dataframe的idx得到下一行。 y-axis 值是枢轴值。我想得到横滨,所以我把传奇位置上移了。此外,由于我们循环遍历散点图,我们将有许多关于枢轴值的图例,因此我们仅在第一次将图例显示设置为 True。
import yfinance as yf
import pandas as pd
import numpy as np
import plotly.express as px
import plotly.graph_objects as go
from datetime import datetime, timedelta
df = yf.download( tickers = 'BTC-USD',
start = '2021-08-30',
end = datetime.today().strftime('%Y-%m-%d'),
interval = '1wk',
group_by = 'ticker',
auto_adjust = True).reset_index()
#daily df for plot
df2 = yf.download( tickers = 'BTC-USD',
start = '2021-08-30',
end = datetime.today().strftime('%Y-%m-%d'),
interval = '1d',
group_by = 'ticker',
auto_adjust = True).reset_index()
#small cap everything
df = df.rename(columns={'Date':'date',
'Open': 'open',
'High': 'high',
'Low' : 'low',
'Close' : 'close'})
df['pivot'] = (df['high']+ df['low'] + df['close'])/3
fig = go.Figure()
fig.add_trace(go.Candlestick(x= df['date'],
open = df['open'],
high = df['high'],
low = df['low'],
close = df['close'],
name = 'Price Candle',
legendgroup='one'
)
)
#fig.add_trace(go.Scatter(mode='lines', x=df['date'], y=df['pivot'], line=dict(color='green'), name='pivot'))
for idx, row in df.iterrows():
#print(idx)
if idx == len(df)-2:
break
fig.add_trace(go.Scatter(mode='lines',
x=[row['date'], df.loc[idx+1,'date']],
y=[row['pivot'], row['pivot']],
line=dict(color='blue', width=1),
name='pivot',
showlegend=True if idx == 0 else False,
)
)
fig.update_layout(
autosize=False,
height=600,
width=1100,
legend=dict(
orientation="h",
yanchor="bottom",
y=1.02,
xanchor="right",
x=1)
)
fig.update_xaxes(rangeslider_visible=False)
fig.show()
我基本上有两个不同的数据框,一个用于计算每周数据 (df),第二个 (df1) stock/crypto 的绘图值。在 df 上,我使用每周创建了一个 pandas 列 'pivot' ((open+high+low)/3)数据以创建一组包含每周枢轴值的值。
现在我想将这些每周数据(作为线条)绘制到具有每日数据的 df1 上。因此 x1 将是一周的开始,x2 将是一周的结束。 y 值是 df(每周)的枢轴值。 Here is what I would want it to look like:
我的方法和问题:
首先,我是Python的初学者,这是我学习的第二个月。如果之前有人问过这个问题,我深表歉意。
我知道可以使用单个数据框和 pandas 分组来计算枢轴值,但我想在这完成后解决这个问题,所以如果你正在接近这个,这两种方法都应该没问题问题。我想要的是带有 OHLC 烛台的最后几行。我想使用 Plotly OHLC and go Shapes 绘制这些结果。我所坚持的是遍历枢轴每周数据框,并将这些线作为轨迹添加到 OHLC 数据每日数据之上。
到目前为止,这是我的代码:
import yfinance as yf
import pandas as pd
import numpy as np
import plotly.express as px
import plotly.graph_objects as go
from datetime import datetime, timedelta
df = yf.download( tickers = 'BTC-USD',
start = '2021-08-30',
end = datetime.today().strftime('%Y-%m-%d'),
interval = '1wk',
group_by = 'ticker',
auto_adjust = True).reset_index()
#daily df for plot
df2 = yf.download( tickers = 'BTC-USD',
start = '2021-08-30',
end = datetime.today().strftime('%Y-%m-%d'),
interval = '1d',
group_by = 'ticker',
auto_adjust = True).reset_index()
#small cap everything
df = df.rename(columns={'Date':'date',
'Open': 'open',
'High': 'high',
'Low' : 'low',
'Close' : 'close'})
df['pivot'] = (df['high']+ df['low'] + df['close'])/3
result = df.copy()
fig = go.Figure(data = [go.Candlestick(x= df['date'],
open = df['open'],
high = df['high'],
low = df['low'],
close = df['close'],
name = 'Price Candle')])
这将用于绘制直到烛台 OHLC,然而,其余的迭代让我感到困扰。您可以将其绘制在折线图或 OHLC 图表上并对其进行迭代。
fig = px.line(df, x='time', y='close')
result = df.copy()
for i, pivot in result.iterrows():
fig.add_shape(type="line",
x0=pivot.date, y0=pivot, x1=pivot.date, y1=pivot,
line=dict(
color="green",
width=3)
)
fig
当我打印这个时,没有枢轴线以我希望的方式出现。Only the original price line graph shows 提前感谢您到目前为止花时间阅读本文。
创建线段有两种方法:添加形状或在散点图上使用线模式。我认为散点图的线模式更有优势,因为它允许更详细的设置。对于dataframe,在line-by-line的基础上引入一个循环过程,利用dataframe的idx得到下一行。 y-axis 值是枢轴值。我想得到横滨,所以我把传奇位置上移了。此外,由于我们循环遍历散点图,我们将有许多关于枢轴值的图例,因此我们仅在第一次将图例显示设置为 True。
import yfinance as yf
import pandas as pd
import numpy as np
import plotly.express as px
import plotly.graph_objects as go
from datetime import datetime, timedelta
df = yf.download( tickers = 'BTC-USD',
start = '2021-08-30',
end = datetime.today().strftime('%Y-%m-%d'),
interval = '1wk',
group_by = 'ticker',
auto_adjust = True).reset_index()
#daily df for plot
df2 = yf.download( tickers = 'BTC-USD',
start = '2021-08-30',
end = datetime.today().strftime('%Y-%m-%d'),
interval = '1d',
group_by = 'ticker',
auto_adjust = True).reset_index()
#small cap everything
df = df.rename(columns={'Date':'date',
'Open': 'open',
'High': 'high',
'Low' : 'low',
'Close' : 'close'})
df['pivot'] = (df['high']+ df['low'] + df['close'])/3
fig = go.Figure()
fig.add_trace(go.Candlestick(x= df['date'],
open = df['open'],
high = df['high'],
low = df['low'],
close = df['close'],
name = 'Price Candle',
legendgroup='one'
)
)
#fig.add_trace(go.Scatter(mode='lines', x=df['date'], y=df['pivot'], line=dict(color='green'), name='pivot'))
for idx, row in df.iterrows():
#print(idx)
if idx == len(df)-2:
break
fig.add_trace(go.Scatter(mode='lines',
x=[row['date'], df.loc[idx+1,'date']],
y=[row['pivot'], row['pivot']],
line=dict(color='blue', width=1),
name='pivot',
showlegend=True if idx == 0 else False,
)
)
fig.update_layout(
autosize=False,
height=600,
width=1100,
legend=dict(
orientation="h",
yanchor="bottom",
y=1.02,
xanchor="right",
x=1)
)
fig.update_xaxes(rangeslider_visible=False)
fig.show()