I am using the ggrepel
package to add labels to the end of lines in ggplot. I am having an issue where the labels are overlapping and adding more labels than needed. I adjusted my max.overlap
value a few times and was still getting overlaps. My 2022 line has no label on it. Attached an image of what was going on, and here is the code to generate the line. Do I need to add some y-axis nudge?
output$creditPlot <- renderPlot({
ggplot(temp_df_long_credit_hours, aes(week, value, group = school_year, alpha = school_year))
geom_line(lwd = 1.5,
show.legend = F)
geom_label_repel(aes(label = school_year),
nudge_x = 4,
na.rm = T,
max.overlaps = 0,
stat = "unique",
show.legend = F,
force_pull = 10)
geom_vline(xintercept = 0)
})
Dataframe used.
> dput(temp_df_long_credit_hours)
structure(list(week = c(-22, -22, -22, -22, -22, -21, -21, -21,
-21, -21, -20, -20, -20, -20, -20, -19, -19, -19, -19, -19, -18,
-18, -18, -18, -18, -17, -17, -17, -17, -17, -16, -16, -16, -16,
-16, -15, -15, -15, -15, -15, -14, -14, -14, -14, -14, -13, -13,
-13, -13, -13, -12, -12, -12, -12, -12, -11, -11, -11, -11, -11,
-10, -10, -10, -10, -10, -9, -9, -9, -9, -9, -8, -8, -8, -8,
-8, -7, -7, -7, -7, -7, -6, -6, -6, -6, -6, -5, -5, -5, -5, -5,
-4, -4, -4, -4, -4, -3, -3, -3, -3, -3, -2, -2, -2, -2, -2, -1,
-1, -1, -1, -1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2,
3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7,
7, 7, 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10,
11, 11, 11, 11, 11, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA), school_year = c("fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022", "fall_2018", "fall_2019", "fall_2020",
"fall_2021", "fall_2022"), value = c(NA, NA, NA, NA, NA, 20761,
18661.5, NA, NA, 10408.5, 56914, 49744.5, NA, 12039, 28930, 72070,
62730, NA, 34960.5, 38809, 85278, 77023.5, NA, 46043, 47951,
94803.5, 87161.5, 57634.5, 55161, 55711.5, 104565.5, 96156.5,
66395, 62856.5, 61944.5, 113641, 103396, 76650.5, 69399, 67723.5,
120581, 109970.5, 84893.5, 75854, 72565, 126255, 114543.5, 90434,
81376, 75630, 131825, 119571, 95729.5, 85729.5, 79555, 136776.5,
124173, 99772, 90196, 83577, 141738, 128459.5, 103475, 94700.5,
87207, 147072, 133202.5, 108800, 98973.5, 91474, 152369, 138274.5,
114452, 103632.5, 95704, 156527, 141785, 118685, 107489.5, 100413,
162992, 147955.5, 124000.5, 111988.5, 107615, 170244, 154728,
131260.5, 118594.5, 114076.5, 179047, 161710.5, 138620.5, 125615,
120784, 188901, 168262.5, 147012, 133236, 129033, 200011, 177967.5,
156769, 142968, 137916.5, 210551.5, 188592, 167904, 152467, 147424,
221325, 197919, 180528, 162947, 158055, 223855.5, 199881.5, 183164,
165206.5, 160699.5, 220775, 197768.5, 180640, 163221.5, 158929,
220600, 198025, 180133, 163479, NA, 221621, 199232, 180923, 164650,
NA, 222392, 200337, 182174, 165379, NA, 223202, 200842, 182492,
166214, NA, 224024.5, 201569, 182758, 166424.5, NA, 224416, 202112,
183081, 166685.5, NA, 224966.5, 202713.5, 183616, 167111.5, NA,
225698.5, 203292, 184464, 167943.5, NA, 226119.5, 203663, 184718,
168058, NA, 227276.5, 206149.5, 186401, 169126.5, NA, 227276.5,
206149.5, 186401, 169126.5, 164678.706656292, NA, NA, NA, NA,
NA)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA,
-185L))
CodePudding user response:
Here maybe one option by creating a separate helper dataframe for the labels. A bit of tinkering around with the geom_label
arguments will allow fine tuning of the labels. Editing scale_x_continuous
expand
argument allows adjustment of the margin to the plot to give the labels a bit more space.
The reason you are not getting a label for 2022 seems to be related to NA
values.
library(ggplot2)
library(dplyr)
labs <-
temp_df_long_credit_hours |>
na.omit() |>
group_by(school_year) |>
filter(week == max(week))|>
mutate(vjust = case_when(school_year == "fall_2022" ~ 0.9,
TRUE ~0.5))
ggplot(temp_df_long_credit_hours, aes(week, value, group = school_year, alpha = school_year))
geom_line(lwd = 1.5,
show.legend = FALSE)
geom_label(data = labs, aes(label = school_year, x = week, y = value),
hjust = -0.1,
vjust = labs$vjust,
show.legend = FALSE)
scale_x_continuous(expand = expansion(mult = c(0.05, 0.2)))
geom_vline(xintercept = 0)
Created on 2022-10-04 with reprex v2.0.2