Search code examples
rplotly

Setting proper title on Pyramid plot


I am trying to plot a pyramid plot. Below you can see data and code :

library(plotly)
library(dplyr)

df1<-data.frame(  
                Age=c("Y_0_4","Y_5_9","Y10_14","Y15_19","Y20_24","Y25_29","Y30_34","Y35_39","Y40_44","Y45_49","Y50_54","Y55_59","Y_0_4","Y_5_9","Y10_14","Y15_19","Y20_24","Y25_29","Y30_34","Y35_39","Y40_44","Y45_49","Y50_54","Y55_59"),
                variable=c("Male","Male","Male","Male","Male","Male","Male","Male","Male","Male","Male","Male","Female","Female","Female","Female","Female","Female","Female","Female","Female","Female","Female","Female"),
                value=c(158,196,168,156,140,693,854,892,904,925,817,257,170,204,178,150,817,763,784,818,823,766,779,349)
                
)
  
df1$color <- factor(df1$variable, labels = c('#1f77b4','#ff7f0e'))


df_pyramid<-df1%>% 
  mutate(value = ifelse(test = variable == "Male", yes = -value, no = value)) %>%
  mutate(abs_pop = abs(value)) %>%
  plot_ly(x= ~value, y=~Age, marker = list(color = ~color), name = ~variable) %>% 
  add_bars(orientation = 'h', hoverinfo = 'text', text = ~abs_pop) %>%
  layout(title = "Structure by age and sex",bargap = 0.1, barmode = 'overlay',
         xaxis = list(tickmode = 'array', tickvals = c(-15000, -10000, -5000, 0, 5000, 10000, 15000),
                      ticktext = c('15000', '10000', '5000', '0', '5000', '10000', '15000')),
         annotations =
           list(x = 0, y = -0.1,
                text = "Source: Some institution",
                showarrow = F,
                xref='paper',
                yref='paper'))
df_pyramid  

This code produce pyramid plot same as the picture below. But below of this chart on the x-axis, you can see the title of the axis value. So can anybody help me with how to remove this title but without changes on the x-axis?

enter image description here


Solution

  • You can use title="" argument in layout of xaxis to remove that title like this:

    library(plotly)
    library(dplyr)
    
    df1<-data.frame(  
      Age=c("Y_0_4","Y_5_9","Y10_14","Y15_19","Y20_24","Y25_29","Y30_34","Y35_39","Y40_44","Y45_49","Y50_54","Y55_59","Y_0_4","Y_5_9","Y10_14","Y15_19","Y20_24","Y25_29","Y30_34","Y35_39","Y40_44","Y45_49","Y50_54","Y55_59"),
      variable=c("Male","Male","Male","Male","Male","Male","Male","Male","Male","Male","Male","Male","Female","Female","Female","Female","Female","Female","Female","Female","Female","Female","Female","Female"),
      value=c(158,196,168,156,140,693,854,892,904,925,817,257,170,204,178,150,817,763,784,818,823,766,779,349)
      
    )
    
    df1$color <- factor(df1$variable, labels = c('#1f77b4','#ff7f0e'))
    
    
    df_pyramid<-df1%>% 
      mutate(value = ifelse(test = variable == "Male", yes = -value, no = value)) %>%
      mutate(abs_pop = abs(value)) %>%
      plot_ly(x= ~value, y=~Age, marker = list(color = ~color), name = ~variable) %>% 
      add_bars(orientation = 'h', hoverinfo = 'text', text = ~abs_pop) %>%
      layout(title = "Structure by age and sex",bargap = 0.1, barmode = 'overlay',
             xaxis = list(tickmode = 'array', tickvals = c(-15000, -10000, -5000, 0, 5000, 10000, 15000),
                          ticktext = c('15000', '10000', '5000', '0', '5000', '10000', '15000'),
                          title = ""),
             annotations =
               list(x = 0, y = -0.1,
                    text = "Source: Some institution",
                    showarrow = F,
                    xref='paper',
                    yref='paper'))
    df_pyramid  
    

    Created on 2022-07-29 by the reprex package (v2.0.1)