如何将数据点添加到时间序列线图中以突出显示事件?
How to add datapoints to a time series line plot to highlight events?
我正在尝试通过 plotly 将 dot/scatter 图添加到现有图上。
目前我的代码如下:
fig = px.line(total_data,
x = 'date', y = ['doge_close','btc_close','eth_close','shib_close'],
color = 'has_tweet', hover_data = ['content', 'of_interest']
)
fig.show()
在此处生成附件图像:
我要做的是在折线图上绘制推文,但作为散点图而不是 has_tweet = 1
线。 (通过 photoshop 添加的点)
我在 plotly python 文档中找不到任何内容,但不幸的是发现了一些与 R 相关的内容,并且 fig.add_trace
在输入中可以处理的内容相当有限,因此添加多个轴无济于事。
感谢您的帮助!
编辑:
感谢一位非常友善的评论者,我快到了。
我已经更新了代码:
fig = px.line(total_data, x = total_data.date,
y = total_data.doge_close)
fig.add_trace(
go.Scatter(
x=total_data[total_data.has_tweet==1].date,
y=total_data[total_data.has_tweet == 1['doge_close'],
mode = 'markers',
name = 'Tweet',
hovertext = ['content', 'of_interest']))
fig.show()
但是,当我试图让它显示推文内容时,除了 doge_price
和日期之外,hovertext 没有显示任何内容。提供悬停图像。
编辑 #2
fig = px.line(total_data, x = total_data.date,
y = total_data.doge_close)
fig.add_trace(
go.Scatter(
x=total_data[total_data.has_tweet==1].date,
y=total_data[total_data.has_tweet == 1['doge_close'],
mode = 'markers',
hovertemplate =
'<i>tweet:</i>'+ '<br>' +
'<i>%{text}</i>',
text = [t for t in total_data['content'] != 'NaN'],
name = 'has_tweets'))
fig.show()
麻烦的地方在这里:text = [t for t in total_data['content'] != 'NaN']
content
列有 7113 行长,但只有 139 行包含任何内容(推文)。我尝试确定它 != 'NaN'
的位置,它似乎有效,除了逻辑上,它将所有内容都设置为 true(事后看来这很有意义),我不知道如何绕过它。
见下文:
我可能在这里遗漏了一些东西,但这应该就像添加带有 fig.add_trace(go.Scatter())
的跟踪一样简单,其值对应于满足某些条件的原始值,如下所示:
fig.add_trace(go.Scatter(x=df[df.has_tweet==1].index,
y = df[df.has_tweet==1]['values'],
mode = 'markers',
name = 'has_tweets'))
情节 1 - 突出显示的事件
如果您想向突出显示的事件添加更多信息,可以通过 go.Scatter
的 hovertemplate
和 text
属性来实现
情节 2 - 在 hovertemplate 中突出显示带有额外信息的事件
情节 1 的完整代码:
import plotly.express as px
import plotly.graph_objects as go
import random
df = px.data.stocks().set_index('date')[['GOOG']].rename(columns={'GOOG':'values'})
df['has_tweet'] = random.choices([0,1], weights=(90,10), k=len(df))
fig = px.line(df, x=df.index, y = 'values')
fig.add_trace(go.Scatter(x=df[df.has_tweet==1].index,
y = df[df.has_tweet==1]['values'],
mode = 'markers',
name = 'has_tweets'))
fig.show()
情节 2 的完整代码:
import plotly.express as px
import plotly.graph_objects as go
import random
df = px.data.stocks().set_index('date')[['GOOG']].rename(columns={'GOOG':'values'})
df['has_tweet'] = random.choices([0,1], weights=(90,10), k=len(df))
df['tweet'] = random.choices(['A','B', 'C'], weights=(50,25,25), k=len(df))
df['tweet'].iloc[4] = "All the other tweets are short, <br> but this one is long"
fig = px.line(df, x=df.index, y = 'values')
fig.add_trace(go.Scatter(x=df[df.has_tweet==1].index,
y = df[df.has_tweet==1]['values'],
mode = 'markers',
hovertemplate =
'<i>tweet:</i>'+ '<br>' +
'<i>%{text}</i>',
text = [t for t in df['tweet']],
name = 'has_tweets'))
fig.show()
我正在尝试通过 plotly 将 dot/scatter 图添加到现有图上。
目前我的代码如下:
fig = px.line(total_data,
x = 'date', y = ['doge_close','btc_close','eth_close','shib_close'],
color = 'has_tweet', hover_data = ['content', 'of_interest']
)
fig.show()
在此处生成附件图像:
我要做的是在折线图上绘制推文,但作为散点图而不是 has_tweet = 1
线。 (通过 photoshop 添加的点)
我在 plotly python 文档中找不到任何内容,但不幸的是发现了一些与 R 相关的内容,并且 fig.add_trace
在输入中可以处理的内容相当有限,因此添加多个轴无济于事。
感谢您的帮助!
编辑:
感谢一位非常友善的评论者,我快到了。
我已经更新了代码:
fig = px.line(total_data, x = total_data.date,
y = total_data.doge_close)
fig.add_trace(
go.Scatter(
x=total_data[total_data.has_tweet==1].date,
y=total_data[total_data.has_tweet == 1['doge_close'],
mode = 'markers',
name = 'Tweet',
hovertext = ['content', 'of_interest']))
fig.show()
但是,当我试图让它显示推文内容时,除了 doge_price
和日期之外,hovertext 没有显示任何内容。提供悬停图像。
编辑 #2
fig = px.line(total_data, x = total_data.date,
y = total_data.doge_close)
fig.add_trace(
go.Scatter(
x=total_data[total_data.has_tweet==1].date,
y=total_data[total_data.has_tweet == 1['doge_close'],
mode = 'markers',
hovertemplate =
'<i>tweet:</i>'+ '<br>' +
'<i>%{text}</i>',
text = [t for t in total_data['content'] != 'NaN'],
name = 'has_tweets'))
fig.show()
麻烦的地方在这里:text = [t for t in total_data['content'] != 'NaN']
content
列有 7113 行长,但只有 139 行包含任何内容(推文)。我尝试确定它 != 'NaN'
的位置,它似乎有效,除了逻辑上,它将所有内容都设置为 true(事后看来这很有意义),我不知道如何绕过它。
见下文:
我可能在这里遗漏了一些东西,但这应该就像添加带有 fig.add_trace(go.Scatter())
的跟踪一样简单,其值对应于满足某些条件的原始值,如下所示:
fig.add_trace(go.Scatter(x=df[df.has_tweet==1].index,
y = df[df.has_tweet==1]['values'],
mode = 'markers',
name = 'has_tweets'))
情节 1 - 突出显示的事件
如果您想向突出显示的事件添加更多信息,可以通过 go.Scatter
hovertemplate
和 text
属性来实现
情节 2 - 在 hovertemplate 中突出显示带有额外信息的事件
情节 1 的完整代码:
import plotly.express as px
import plotly.graph_objects as go
import random
df = px.data.stocks().set_index('date')[['GOOG']].rename(columns={'GOOG':'values'})
df['has_tweet'] = random.choices([0,1], weights=(90,10), k=len(df))
fig = px.line(df, x=df.index, y = 'values')
fig.add_trace(go.Scatter(x=df[df.has_tweet==1].index,
y = df[df.has_tweet==1]['values'],
mode = 'markers',
name = 'has_tweets'))
fig.show()
情节 2 的完整代码:
import plotly.express as px
import plotly.graph_objects as go
import random
df = px.data.stocks().set_index('date')[['GOOG']].rename(columns={'GOOG':'values'})
df['has_tweet'] = random.choices([0,1], weights=(90,10), k=len(df))
df['tweet'] = random.choices(['A','B', 'C'], weights=(50,25,25), k=len(df))
df['tweet'].iloc[4] = "All the other tweets are short, <br> but this one is long"
fig = px.line(df, x=df.index, y = 'values')
fig.add_trace(go.Scatter(x=df[df.has_tweet==1].index,
y = df[df.has_tweet==1]['values'],
mode = 'markers',
hovertemplate =
'<i>tweet:</i>'+ '<br>' +
'<i>%{text}</i>',
text = [t for t in df['tweet']],
name = 'has_tweets'))
fig.show()