In the figure, is it possible to jitter the state abbreviation labels a bit so they don't overlap? If I use check_overlap = TRUE
, then it removes some observations that overlap, and I don't want that. I also don't want the geom_label_repel
, since it has the labels stick out and move across the 45 degree line I included (which I don't want to happen)
Here's the pertinent part of my code for reference:
ggplot(df, aes(x = huff_margin_dem, y = margin16dem_state, label = abbrev)) + geom_abline(intercept = 0) + geom_text(fontface = "bold")
Have you tried position=position_jitter()
? You can adjust the width
and height
to your choosing.
ggplot(df, aes(x = huff_margin_dem, y = margin16dem_state, label = abbrev)) + geom_abline(intercept = 0) + geom_text(fontface = "bold",position=position_jitter(width=1,height=1))
EDIT An example to manipulate a certain label only
+geom_text(fontface = "bold", position=position_jitter(width=ifelse(df$abbrev=='KS',1,0), height=ifelse(df$abbrev=='KS',1,0)))
Or multiple labels
df$jit<-with(df, ifelse(abbrev == "KS" | abbrev == "LA", 1, 2)) +geom_text(fontface = "bold", position=position_jitter(width=df$jit,height=df$jit))
Just thought I'd point out that ggrepel::geom_text_repel
will do what you're after. Considering some of the text in your example already overlaps with the line, I figure perhaps it is the label
part of geom_label_repel
that you don't like, due to the background it will place behind your text, blocking the line.
Using your example:
ggplot(df) + geom_text_repel(aes(x = huff_margin_dem, y = margin16dem_state, label = abbrev))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With