web-dev-qa-db-fra.com

Comment trembler / supprimer le chevauchement pour les étiquettes geom_text

Figure

Dans la figure, est-il possible d'agiter un peu les étiquettes d'abréviation d'état afin qu'elles ne se chevauchent pas? Si j'utilise check_overlap = TRUE, puis il supprime certaines observations qui se chevauchent, et je ne veux pas cela. Je ne veux pas non plus le geom_label_repel, car les étiquettes dépassent et se déplacent sur la ligne de 45 degrés que j'ai incluse (ce que je ne veux pas faire)

Voici la partie pertinente de mon code pour référence:

ggplot(df, aes(x = huff_margin_dem, y = margin16dem_state, label = abbrev)) +
  geom_abline(intercept = 0) +
  geom_text(fontface = "bold")
14

Avez-vous essayé position=position_jitter()? Vous pouvez ajuster les width et height à votre choix.

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 Un exemple pour manipuler une certaine étiquette seulement

+geom_text(fontface = "bold",
position=position_jitter(width=ifelse(df$abbrev=='KS',1,0),
      height=ifelse(df$abbrev=='KS',1,0)))

Ou plusieurs étiquettes

df$jit<-with(df, ifelse(abbrev == "KS" | abbrev == "LA", 1, 2))

+geom_text(fontface = "bold",
    position=position_jitter(width=df$jit,height=df$jit))
14
J.Con

Je pensais juste souligner que ggrepel::geom_text_repel fera ce que vous recherchez. Étant donné qu'une partie du texte de votre exemple chevauche déjà la ligne, je pense que c'est peut-être la partie label de geom_label_repel que vous n'aimez pas, en raison de l'arrière-plan qu'il placera derrière votre texte, bloquant la ligne.

En utilisant votre exemple:

ggplot(df) +
  geom_text_repel(aes(x = huff_margin_dem, 
                      y = margin16dem_state, 
                      label = abbrev))
8
conor