Come aggiungere geom_text o geom_label con una posizione relativa alla dimensione di un geom_point?
Quello che sto cercando di fare è aggiungere un'etichetta ai punti realizzati con geom_point che hanno una variabile mappata alla dimensione. Il valore viene visualizzato anche nell'etichetta. Il testo o l'etichetta dovrebbero essere posizionati appena sotto geom_point, ma non sembra possibile ottenerlo con position_nudge.
Il mio codice attualmente ha questo aspetto (semplificato):
ggplot(data, aes(x = var1, y = var2) +
geom_point(aes(size = var3)) +
geom_text(aes(label = var3))
Il risultato è questo
ma sto cercando di ottenere qualcosa del genere:
C'è un modo per raggiungere questo obiettivo in modo semplice?
Grazie.
EDIT: sto cercando di impostare la distanza tra il bordo del geom_point e il bordo delle etichette come valore fisso.
Risposte
Spero che questo sia sufficientemente diverso da meritare un'altra risposta. Ammetto di aver trascurato un po 'di cosa esattamente volevi posizionare le etichette. Quindi fondamentalmente lo vuoi non relativo al centro del punto, ma al raggio.
Mi è venuta in mente in modo piuttosto nostalgico la mia prima domanda in questa comunità , di cui ammetto di non aver capito la sua risposta da molto tempo.
L'idea di base è non usare geom_point , ma usare ggforce :: geom_circle (o: geom_ellipse). È possibile utilizzare il raggio che si utilizza per la creazione per il posizionamento delle etichette. Richiede un po 'di hard coding, ma sono sicuro che ci sarebbero modi per definire a livello di codice il raggio in base alle coordinate generali.
library(ggplot2)
library(ggforce)
foo <- data.frame(var1 = rep(1:3, 2), var2 =rep(1:2, each = 3),
var3 = c(3, 10, 2, 1, 1, 10))
# Create cuts - you can also assign other values of course. factor of 0.01 was chosen randomly.
foo$rad <- 0.01 * findInterval(foo$var3, 1:5)
ggplot(foo) +
geom_circle(aes(x0 = var1, y0 = var2, r = rad),
fill = "Grey50") +
geom_text(aes(x = var1, y = var2 - rad - 0.03, label = var3)) +
coord_equal()
Creato il 2021-01-20 dal pacchetto reprex (v0.3.0)
Il problema può essere risolto ridimensionandolo size
e aggiungendolo alla vjust
distanza dai punti.
library(ggplot2)
ggplot(data, aes(x = var1, y = var2)) +
geom_point(aes(size = var3), show.legend = FALSE) +
geom_text(aes(label = var3, vjust = 1.5 + 0.1 * var3))
Dati di test
data <- data.frame(var1 = factor(rep(1:3, 2)),
var2 = factor(rep(1:2, each = 3)),
var3 = c(3, 10, 2, 1, 1, 10))
Uso nudge
Grazie a Rui per i dati. +1
library(ggplot2)
data <- data.frame(var1 = factor(rep(1:3, 2)),
var2 = factor(rep(1:2, each = 3)),
var3 = c(3, 10, 2, 1, 1, 10))
ggplot(data, aes(x = var1, y = var2)) +
geom_point(aes(size = var3), show.legend = FALSE) +
geom_text(aes(label = var3), nudge_y = -0.1 )
Creato il 2021-01-20 dal pacchetto reprex (v0.3.0)