1

Currently my plot looks like this :

enter image description here Plot, Data and Code:

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]

I want to add some annotation below the graph.

As suggested by answer:

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()

enter image description here

But it is still squewed :/

1 Answer 1

1

It's not 100% clear which figure you'd like to annotate. But for now I'm assuming this:

enter image description here


You haven't shared a sample of your data, so it's hard to tell for sure. But it seems to me that your x-values are timestamps and you're usinf x=4 in fig.add_annotation().So you'll need to make sure that the values you have assigned to the x-axis corresponds to the values you're assigning in fig.add_annotation(). Below is a working example that should let you do exactly what you want.

Plot:

enter image description here

Code:

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()
Sign up to request clarification or add additional context in comments.

10 Comments

thanks for your detailed answer, but I am still struggling. If I use your suggested code, the barplot still ranges between zero and 2019 . I will edit the question .
@Epimetheus Thank you for your swift feedback! That's turned into a rarity under the [plotly] tag lately. If you're committed to finding a solution, then please provide a data sample as described here. It's very easy if you invest the three minutes it takes to read it. If my suggestion so far is at least useful to you, I wouldn't mind an upvote either.
@Epimetheus If you're having trouble following the steps in the link above, then don't hesitate to let me know!
I edited the question once again. I hope the problem is more clearer now. My question is, why is the x axis still skewed?
@Epimetheus I'll take a look in a few hours
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.