Skip to content
LowCode
  • AI Chat
  • Code
  • Report
  • import pandas as pd
    # reading a CSV file into a pandas dataframe
    df = pd.read_csv("https://query.data.world/s/prebskqer67rjhcqfoea7n5wxh7m4u")
    # applying filter
    df = df[df.SEX == 'Total']
    
    df.columns = ['SEX', 'AGE', 'Population']
    
    # selecting required columns
    df = df.loc[:, ['AGE', 'Population']]
    
    # calculating year of birth
    df['birthYear'] = 2019 - df.AGE
    
    # sorting values
    df = df.sort_values('birthYear')
    
    display(df.head())
    # importing plotly 
    import plotly.express as px
    
    # plotting bar graph
    fig = px.bar(df, x=df.birthYear, y=df.Population,
                 title="BY BIRTH YEAR GENERATION POPULATIONS")
    fig.show()
    #step 1 - update background
    fig.update_layout(
            plot_bgcolor = '#DCD2C4',
            paper_bgcolor = '#DCD2C4'
        )
    # step 2 - update marker
    
    bins = [1918,1927, 1945, 1964, 1980, 1996, 2012, 2019]
    labels = ["#00C3A9","#00AD90","#00C3A9","#00AD90","#00C3A9","#00AD90",
              "#00C3A9"]
    colors = pd.cut(df.birthYear, bins=bins, labels=labels, ordered=False)
    
    fig.update_traces(
            marker_color=colors,
            marker_line_color='#DCD2C4',
            marker_line_width=0.5,
            opacity=0.5
        )
    # step 3 - Deleting grid line and zeroline
    fig.update_yaxes(
            showgrid=False,
            zeroline = False,
        )
    
    # step 4 - Adjusting Bar Gap
    fig.update_layout(
            bargap=0.0001
    )
    # step 5a - Update Titles
    fig.update_xaxes(
            title=dict(
              text='Birth Year',
              font=dict(size=18, family="Trebuchet MS"),
              standoff=20
            ),
        )
    
    fig.update_yaxes(
            title=dict(
              text='Population',
              font=dict(size=18, family="Trebuchet MS"),
              standoff=20
            ),
        )
    fig.update_layout(
            title=dict(
                text='BY BIRTH YEAR GENERATION POPULATIONS',
                font=dict(size=28, family="Trebuchet MS"),
                x=0.5,
            )
        )
    # Step 6 - Specifying Generation Reigns
    datetoannote = [1927.5, 1945.5, 1964.5, 1980.5, 1996.5, 2012.5]
    
    for i in datetoannote:
        fig.add_vline(
                x=i,
                fillcolor="black", opacity=1,layer="above", line_width=2,
                line_dash="dot"
            )
    
        fig.add_annotation(
                text=str(int(i+0.5)),
                xref="x", yref="y",textangle=270,
                x=i+1, y=4800000, showarrow=False
            )
       
    # step 7 adding annotation
    y = 6600000
    y_toadd = 200000
    fig.add_annotation(
                text="#7<br><b>GREATEST <br> GENERATION</b><br>",
                xref="x", yref="y",textangle=0,
                font=dict(family="Trebuchet MS",size=14,color='black'),
                align = 'center', x=1920, y=y, showarrow=False
            )
    fig.add_annotation(
                text="#6<br><b>SILENT <br> GENERATION</b><br>",
                xref="x", yref="y",textangle=0,
                font=dict(family="Trebuchet MS",size=14,color='black'),
                align = 'center', x=1937, y=y, showarrow=False
            )
    fig.add_annotation(
                text="#2<br><b>BOOMERS</b><br>",
                xref="x", yref="y",textangle=0,
                font=dict(family="Trebuchet MS",size=14,color='black'),
                align = 'center', x=1955, y=y+y_toadd, showarrow=False
            )
    fig.add_annotation(
                text="#4<br><b>GENERATION X</b><br>",
                xref="x", yref="y",textangle=0,
                font=dict(family="Trebuchet MS",size=14,color = 'black'),
                align = 'center', x=1972.5, y=y+y_toadd, showarrow=False
            )
    fig.add_annotation(
                text="#1<br><b>MILLENNIALS</b><br>",
                xref="x", yref="y",textangle=0,
                font=dict(family="Trebuchet MS",size=14,color='black'),
                align = 'center', x=1988.5, y=y+y_toadd, showarrow=False
            )
    fig.add_annotation(
                text="#3<br><b>GENERATION Z</b><br>",
                xref="x", yref="y",textangle=0,
                font=dict(family="Trebuchet MS",size=14,color='black'),
                align = 'center', x=2004.5, y=y+y_toadd, showarrow=False
            )
    fig.add_annotation(
                text="#5<br><b>GENERATION <br> ALPHA</b><br>",
                xref="x", yref="y",textangle=0,
                font=dict(family="Trebuchet MS",size=14,color='black'),
                align = 'center', x=2020, y=y, showarrow=False
            )
    
    
    fig.add_annotation(
                text="1.7M  |  0.5%",
                xref="x", yref="y",textangle=0,
                font=dict(family="Trebuchet MS",size=12,color='black'),
                x=1920, y=5550000, showarrow=False
            )
    fig.add_annotation(
                text="23.2M  |  7.1%",
                xref="x", yref="y",textangle=0,
                font=dict(family="Trebuchet MS",size=12,color='black'),
                x=1937, y=5550000, showarrow=False
            )
    fig.add_annotation(
                text="71.6M  |  21.8%",
                xref="x", yref="y",textangle=0,
                font=dict(family="Trebuchet MS",size=12,color='black'),
                x=1955, y=5550000, showarrow=False
            )
    fig.add_annotation(
                text="65.2M  |  19.9%",
                xref="x", yref="y",textangle=0,
                font=dict(family="Trebuchet MS",size=12,color='black'),
                x=1973, y=5550000, showarrow=False
            )
    fig.add_annotation(
                text="72.1M  |  22.0%",
                xref="x", yref="y",textangle=0,
                font=dict(family="Trebuchet MS",size=12,color='black'),
                x=1989, y=5550000, showarrow=False
            )
    fig.add_annotation(
                text="66.9M  |  20.4%",
                xref="x", yref="y",textangle=0,
                font=dict(family="Trebuchet MS",size=12,color='black'),
                x=2005, y=5550000, showarrow=False
            )
    fig.add_annotation(
                text="27.6M  |  8.4%",
                xref="x", yref="y",textangle=0,
                font=dict(family="Trebuchet MS",size=12,color='black'),
                x=2020, y=5550000, showarrow=False
            )
    fig.add_annotation(
                text=" Total  %POP.",
                font=dict(family="Courier New, monospace",size=11,color = 'black'),
                xref="x", yref="y",textangle=0,align="center",
                x=1920, y=5200000, showarrow=False
            )
    fig.add_annotation(
                text="Those born before<br> 1920 were grouped<br> together",
                font=dict(family="Courier New, monospace",size=10,color = 'black'),
                xref="x", yref="y",textangle=0,align="right",
                x=1919, y=100322, showarrow=True
            )
    # Step 8 - update axes
    fig.update_xaxes(
                range=[1915,2020],
                
                showline=True,
                linecolor='black',
                linewidth=3,
                
                showgrid=False,
        
                layer='above traces',
                
                showticklabels=True,
                tickmode = 'array',
                tickvals = [1920, 1930, 1940, 1950, 1960, 1970,
                            1980, 1990, 2000, 2010, 2019],
                ticks="outside",
                tickwidth=1.5,
                tickcolor='black',
                ticklen=10,
                tickprefix = "  ",
                ticksuffix = "  ",
        
                fixedrange=True,
            )
    
    fig.update_yaxes(
                showline = False,
                
                showgrid=False,
                
                fixedrange=True,
                
                zeroline = False,
        
                tickmode = 'array',
                ticktext=[0, "1 ", "2 ", "3 ", "4 "],
                tickvals = [0, 1000000, 2000000, 3000000, 4000000],
                ticks="inside",
                tickwidth=1,
                tickcolor='black',
                ticklen=10,
            )
    # updating fig size, margin and titles
    fig.update_layout(
                height=700,
                margin=dict(t=120, l=60, r=60, b=60, pad = 0),
                title="",
                yaxis_title="",
                xaxis_title=""
            )
    
    fig.add_annotation(
                  text="BIRTH YEAR",
                  xref="paper", yref="paper",
                  x=0.01, y=-0.09, showarrow=False
            )
    fig.add_annotation(
                  text="MILLION PEOPLE",
                  xref="paper", yref="paper",
                  x=-0.02, y=0.65, showarrow=False
            )
    fig.add_annotation(
                  text="Compiled from population estimates from the\
                        United States Census Bureau for July 2019",
                  xref="paper", yref="paper",
                  font=dict(family="Courier",size=11,color = 'black'),
                  x=1.05, y=-0.12, showarrow=False
            )
    fig.add_shape(
                  type="rect",x0=0.02, y0=1.09, x1=0.03, y1=1.15,
                  xref='paper', yref='paper',
                  line=dict(color='black',width=1),
                  fillcolor='black',opacity = 0.5
            )
    fig.add_annotation(
                text="GENERATION POPULATIONS,",
                xref='paper', yref='paper',x= 0.03,y=1.14,
                textangle=0,align="right",showarrow=False,
                font=dict(size=25, family="Trebuchet MS", color="#00AD90")
            )
    fig.add_annotation(
                text="WITH RANKINGS BY MOST NUMBER OF PEOPLE ALIVE",
                xref='paper', yref='paper', x=0.61, y=1.125,
                textangle=0,align="right",showarrow=False,
                font=dict(size=15, family="Trebuchet MS", color="#00C3A9")
            )