I am trying to add different colors to a text in ggplot using the function annotate().
The results are quite good, but I have to define manually which are the right y values to correctly overlap the text.
Plot with annotations for 
I would love to know if there is a better way to overlap text in annotations in R. Thank you,
Btw, here is the code I am using:
ex_3_1 %>% 
  ggplot(aes(x = DATE)) +
    # geometries
    geom_line(aes(y = if_else(ORIGIN == "ACTUAL" |
                                (YEAR == 2019 & MONTH == "JUN"), 
                              SALES, NULL)), size = 1) +
    geom_line(aes(y = if_else(ORIGIN == "FORECAST", SALES, NULL)), 
              linetype = "dashed", size = 1) +
    geom_point(aes(y = REL_SALES), size = 3) +
    geom_point(aes(y = if_else(MONTH == "JUL" & YEAR == 2018, SALES, NULL)), 
               shape = 21, fill = "darkorange", size = 3) + 
    geom_point(aes(y = if_else(MONTH == "FEB" & YEAR == 2019, SALES, NULL)), 
               shape = 21, fill = col, size = 3) + 
    geom_text(aes(y = SALES, label = dollar(round(REL_SALES,1), 
                                 suffix = "B", accuracy = 0.1)), 
              vjust = -1.5, hjust = 0.2, size = 3) +
    # annotations
      # square text
    annotate(geom = "rect", xmin = as_date("2019-05-20"), 
             xmax = as_date("2020-01-10"), ymin = 0, ymax = 2.6, 
             alpha = 0.1) + 
    annotate(geom = "text",
             x = as_date("2020-01-01"), y = 1, hjust = 1, vjust = -1,
             label = expression(bold("2019 FORECAST")), 
             col = "gray60", size = 3.25) +
    annotate(geom = "text",
             x = as_date("2020-01-01"), y = 1, hjust = 1, vjust = 1,
             label = paste0("This is provided by ABC\n",
                              "consultants and based on\n",
                              "market data through June.\n",
                              "The forecast assumes no\n",
                              "major market changes.\n"), 
             col = "gray60", size = 3.5) +
      # 2018 notes
    annotate(
      geom = "text", x = as_date("2018-01-10"), y = 3.5, hjust = 0, vjust = 1,
      label = paste0("2018: Jan-Jun was a period of stability, with\n",
                     "fairly steady growth (averaging +3% per\n",
                     "month). There was a nearly 20% decrease\n", 
                     "in July, when Product X was recalled and\n", 
                     "pulled from the market. Total sales remained\n", 
                     "at reduced volume for the rest of the year."),
      col = "gray60", size = 3.5) +   
    annotate(
      geom = "text", x = as_date("2018-01-10"), y = 3.5, hjust = 0, vjust = 1,
      label = expression(bold("2018:")),
      col = "gray60", size = 3.5) +
    annotate(
      geom = "text", x = as_date("2018-01-10"), y = 3.19, hjust = 0, vjust = 1,
      label = expression(phantom("month). There was a ")*
                           "nearly 20% decrease"),
      size = 3.5, col = "darkorange") +
    annotate(
      geom = "text", x = as_date("2018-01-10"), y = 3.03, hjust = 0, vjust = 1,
      label = "in July",
      size = 3.5, col = "darkorange") +
      # 2019 notes
    annotate(
      geom = "text", x = as_date("2019-01-10"), y = 3.5, hjust = 0, vjust = 1,
      label = paste0("2019: The year started at less than $1.6B, but\n",
                     "Increased markedly in February, when a new\n",
                     "study was released. Total sales have increased\n", 
                     "steadly since then and this projected to continue.\n", 
                     "The latest forecast is for $2.4B in monthly sales by\n", 
                     "the end of the year."),
      col = "gray60", size = 3.5) +
    annotate(
      geom = "text", x = as_date("2019-01-10"), y = 3.5, hjust = 0, vjust = 1,
      label = expression(bold("2019:")),
      col = "gray60", size = 3.5) +
    annotate(
      geom = "text", x = as_date("2019-01-10"), y = 3.35, hjust = 0, vjust = 1,
      label = "Increased markedly in February",
      size = 3.5, col = col) +
    # scales
    scale_x_date(date_labels = "%b'%y", date_breaks = "3 month") +
    scale_y_continuous(labels = dollar, breaks = c(seq(0,3.5,0.5)), 
                       limits = c(0, 3.5)) +
    # titles
    labs("Market size over time") +
    ylab("SALES ($USD BILLIONS)") +
    # themes
    theme_void() +
    theme(
      axis.line.x = element_line(color = "gray58"),
      axis.text.y = element_text(size = 11, color = "gray58"),
      axis.title.y = element_text(hjust = 1, color = "gray58"),
      axis.text.x = element_text(size = 9, color = "gray58")
    )
 
    