Python 如何使用plotly在条形图中添加注释?
当前我的绘图如下所示: 绘图、数据和代码:Python 如何使用plotly在条形图中添加注释?,python,plotly,bar-chart,pie-chart,Python,Plotly,Bar Chart,Pie Chart,当前我的绘图如下所示: 绘图、数据和代码: df_pub = pd.read_excel('D:\Masterarbeit\Data\Excel/publication_years.xlsx') fig = px.bar(df_pub, x = 'Publication date', y = 'Freq.') fig.show() years = ['80', '81', '82', '83', '84', '85', '86, '87', '88', '89', '90', '91',
df_pub = pd.read_excel('D:\Masterarbeit\Data\Excel/publication_years.xlsx')
fig = px.bar(df_pub, x = 'Publication date', y = 'Freq.')
fig.show()
years = ['80', '81', '82', '83', '84', '85', '86, '87', '88', '89', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99' ,'00' ,'01', '02', '03', '04' '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19']
freq = [173,1368,2238,4135,5455,6280,7470,6580,7537,8781,10894,14788,20562,27637,32446,32665,30374,28234,24235,22312,16817,20222,24080,30398,30230,27462,33582,28908,31648,26579,29121,31216,34574,34271,32570,32531,43390,46761,55920,34675]
我想在图表下面添加一些注释
正如答复所建议的那样:
import pandas as pd
import plotly.express as px
df_pub = pd.read_excel('D:/Masterarbeit/Data/Excel/publication_years.xlsx')
fig = px.bar(df_pub, x = 'Publication date', y = 'Freq.', title = 'Frequency of publicated patents 1980-2019'
)
annot_y = -0.2
annot_t = 'Figure 1(i) - Patent frequency 1980-2019Q1'
fig.add_annotation(
y=annot_y,
showarrow=False,
text=annot_t,
textangle=0,
xanchor='left',
xref="x",
yref="paper")
fig.show()
但它仍然被压制住了:/还没有100%清楚您要注释哪个图形。但现在我假设:
您尚未共享数据样本,因此很难确定。但在我看来,你的x值是时间戳,你在图中使用了
x=4
。因此,你需要确保你分配给x轴的值与你在图中分配的值相对应。添加注释()。下面是一个工作示例,它应该让您完全按照自己的意愿去做
绘图:
代码:
将numpy导入为np
作为pd进口熊猫
导入plotly.graph_对象作为go
将plotly.express导入为px
导入日期时间
从plotly.subplot导入make_子地块
pd.set\u选项('display.max\u rows',无)
#数据样本
n周期=50
np.随机种子(123)
df=pd.DataFrame(np.random.randint(-6,12,size=(npperiods,2)),
列=[“价格”、“差异”])
datelist=pd.date\u范围(datetime.datetime(2017,1,1).strftime(“%Y-%m-%d”),periods=npperiods)。tolist()
df['date']=日期列表
df=df.set_索引(['date'])
df.index=pd.to_datetime(df.index)
#df.iloc[0]=1000
#df=df.cumsum().reset_index()
df.reset_索引(原地=真)
df['price']=df['price'].cumsum()
df['disference']=df['disference'].cumsum()
#filtered=df[(df['date']>'2017-1-24')&(df['date']感谢您的详细回答,但我仍在努力。如果我使用您建议的代码,条形图的范围仍然在零到2019之间。我将编辑该问题。@Epimetheus感谢您的快速反馈!这在[plotly]下变得非常罕见
tag最近。如果您致力于找到解决方案,请提供所述的数据示例。如果您花三分钟阅读它,这非常容易。如果我的建议至少对您有用,我也不介意投票。@Epimetheus如果您在执行上述链接中的步骤时遇到问题,请不要这样做“别犹豫让我知道!我再次编辑了这个问题。我希望问题现在更清楚。我的问题是,为什么x轴仍然倾斜?@Epimetheus几小时后我会看一看。”
import numpy as np
import pandas as pd
import plotly.graph_objects as go
import plotly.express as px
import datetime
from plotly.subplots import make_subplots
pd.set_option('display.max_rows', None)
# data sample
nperiods = 50
np.random.seed(123)
df = pd.DataFrame(np.random.randint(-6, 12, size=(nperiods, 2)),
columns=['price', 'divergence'])
datelist = pd.date_range(datetime.datetime(2017, 1, 1).strftime('%Y-%m-%d'),periods=nperiods).tolist()
df['date'] = datelist
df = df.set_index(['date'])
df.index = pd.to_datetime(df.index)
# df.iloc[0] =1000
# df = df.cumsum().reset_index()
df.reset_index(inplace=True)
df['price'] = df['price'].cumsum()
df['divergence'] = df['divergence'].cumsum()
# filtered = df[(df['date'] > '2017-1-24') & (df['date'] <= '2018-1-24')]
fig = make_subplots(specs=[[{"secondary_y": True}]])
fig.add_trace(
go.Bar(
x=df['date'],
y=df['divergence'],
#opacity=0.5
)
)
fig.update_traces(marker_color = 'rgba(0,0,250, 0.5)',
marker_line_width = 0,
selector=dict(type="bar"))
fig.update_layout(bargap=0,
bargroupgap = 0,
)
annot_x = df['date'].to_list()[::20]
annot_y = -0.2
annot_t = list('ABC')
for i, x in enumerate(annot_x):
# print(x)
fig.add_annotation(dict(font=dict(color='red',size=12),
x=x,
y=annot_y,
showarrow=False,
text=annot_t[i],
textangle=0,
xanchor='left',
xref="x",
yref="paper"))
fig.show()