Home > Back-end >  Adding a shaded triangle to a ggplot2 plot
Adding a shaded triangle to a ggplot2 plot

Time:10-11

I am actually trying to build a graph showing the fiscal space of a country, so that it looks like this But for now it looks like this

I don't know how to add the transparent triangle like in the model. I tried with several functions but I didn't manage to succeed.

I used:

geom_area(x = c(-15, 15, 15), c(-15, -15, 15))

geom_polygon(aes(x = c(-15, 15, 15),y = c(-15, -15, 15), col = 'grey'))

as well as

triangle <- tibble(x = -15:15)    
geom_ribbon(data = triangle, aes(x, x, ymin=-15, ymax=15), alpha = 0.4)

But none of these functions worked. Here is a preview of my code:

df %>%
ggplot(aes(CAB, gvtbal, xmin=-15, xmax=15, ymin=-15, ymax=15, colour=year))   
  geom_point()   
geom_label_repel(aes(label= year),
                  box.padding   = 0.35, 
                  point.padding = 0.5,
                  segment.color = 'grey50',
                  max.overlaps = 50,
                  force= 85)  
    # Add lines 45° line for private sector, add x and y axis for CAB and gvtbal
      geom_abline(color='grey')  
      geom_vline(xintercept = 0, color='grey') 
      geom_hline(yintercept = 0, color='grey')

I would like the shaded triangle to cover the area below the geom_abline function.

Thank you.

CodePudding user response:

You could try with annotate.

In the absence of a reproducible data I've mocked up a dataset.

I'm assuming you are OK with the labelling of the axis and title as the question is specifically about the shaded triangle.

library(ggplot2)
library(ggrepel)

set.seed(123)

df <- data.frame(CAB = runif(10, 0, 15),
                 gvtbal = runif(10, -3, 1),
                 year = 2001:2010)


df  |> 
  ggplot(aes(CAB, gvtbal, xmin=-15, xmax=15, ymin=-15, ymax=15, colour=year))   
  geom_point()   
  geom_label_repel(aes(label= year),
                   box.padding   = 0.35, 
                   point.padding = 0.5,
                   segment.color = 'grey50',
                   max.overlaps = 50,
                   force= 85)  
  # Add lines 45° line for private sector, add x and y axis for CAB and gvtbal
  geom_abline(color='grey')  
  geom_vline(xintercept = 0, color='grey') 
  geom_hline(yintercept = 0, color='grey') 
  annotate(geom = "polygon", x = c(-Inf, Inf, Inf), y = c(-Inf, Inf, -Inf), fill = "blue", alpha = 0.1 ) 
  theme(legend.position = "none") 
  coord_fixed()

Created on 2022-10-10 with reprex v2.0.2

  • Related