Home > Software design >  Adjusting Dual Axis Chart with ggplot (R)
Adjusting Dual Axis Chart with ggplot (R)

Time:12-28

I want to visualize how many copies of each product category are sold (2nd column on table below) and add line that represents % market share (3rd column) Table I used sec_axis function to adjust second axis scale but it seems like data doesnt want to connect with it and it still operate on the first axis scale.

       tabela %>% ggplot()  
      geom_col(aes(x =`Przedział Cenowy`,  y = `Sprzedaz przypadająca na jeden tytuł `), 
fill = "blue", alpha = .4) 
      geom_point(aes(x =`Przedział Cenowy`, y = `Liczba Sprzedanych Kopii / Całkowitą sprzedaż [%]`), color= "red")  
      geom_line(aes(x =`Przedział Cenowy`, y = `Liczba Sprzedanych Kopii / Całkowitą sprzedaż [%]`), color= "red")  
      scale_y_continuous(sec.axis = sec_axis(~./2800, name = "Procent"))

Running code adds the second axis as desired with correct units that should allow to visualize % market share but points and lines look like they still operate on the first axis. Chart result When I change ylim=c(0,150) it looks like that changed ylim

So for me it clearly looks like points and line are still operating on the first not the second axis. How could I fix it?

CodePudding user response:

You need to scale the data that should appear on the sec_axis by the reciprocal of the scaling factor used to create that axis. So your code should read:


tabela %>% 
   ggplot()  
   geom_col(aes(x =`Przedział Cenowy`,  
                y = `Sprzedaz przypadająca na jeden tytuł `), 
            fill = "blue", 
            alpha = .4) 
   geom_point(aes(x =`Przedział Cenowy`, 
                  y = 2800*(`Liczba Sprzedanych Kopii / Całkowitą sprzedaż [%]`)), 
              color= "red")  
   geom_line(aes(x =`Przedział Cenowy`, 
                  y = 2800*(`Liczba Sprzedanych Kopii / Całkowitą sprzedaż [%]`)), 
              color= "red")  
      scale_y_continuous(sec.axis = sec_axis(~./2800, name = "Procent"))

  • Related