Wie füge ich geom_text oder geom_label mit einer Position relativ zur Größe eines geom_point hinzu?
Ich versuche, Punkten, die mit geom_point erstellt wurden und deren Variable der Größe zugeordnet ist, eine Beschriftung hinzuzufügen. Der Wert wird auch auf dem Etikett angezeigt. Der Text oder die Beschriftung sollte direkt unter dem geom_point positioniert werden, aber dies mit position_nudge zu erreichen, scheint nicht möglich zu sein.
Mein Code sieht derzeit so aus (vereinfacht):
ggplot(data, aes(x = var1, y = var2) +
geom_point(aes(size = var3)) +
geom_text(aes(label = var3))
Das Ergebnis ist dies
aber ich versuche so etwas zu erreichen:
Gibt es eine Möglichkeit, dies auf einfache Weise zu erreichen?
Vielen Dank.
BEARBEITEN: Ich versuche, den Abstand zwischen dem Rand des geom_point und dem Rand der Beschriftungen als festen Wert festzulegen.
Antworten
Ich hoffe, dass dies ausreichend anders ist, um eine weitere Antwort zu verdienen. Ich gebe zu, ich habe das bisschen übersehen, was genau Sie die Etiketten positionieren wollten. Grundsätzlich möchten Sie es also nicht relativ zum Punktmittelpunkt, sondern zum Radius.
Ich fühlte mich ziemlich nostalgisch an meine erste Frage in dieser Community erinnert , von der ich zugeben muss, dass ich ihre Antwort schon lange nicht mehr verstanden habe.
Die Grundidee ist, nicht geom_point zu verwenden , sondern ggforce :: geom_circle (oder: geom_ellipse). Sie können den Radius, den Sie für die Erstellung verwenden, zum Positionieren Ihrer Etiketten verwenden. Es erfordert ein wenig harte Codierung, aber ich bin sicher, dass es Möglichkeiten gibt, den Radius basierend auf Ihren allgemeinen Koordinaten programmgesteuert zu definieren.
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()
Erstellt am 2021-01-20 vom reprex-Paket (v0.3.0)
Das Problem kann gelöst werden, size
indem es skaliert und zum vjust
Abstand zu den Punkten hinzugefügt wird .
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))
Testdaten
data <- data.frame(var1 = factor(rep(1:3, 2)),
var2 = factor(rep(1:2, each = 3)),
var3 = c(3, 10, 2, 1, 1, 10))
Benutzen nudge
Danke an Rui für die Daten. +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 )
Erstellt am 2021-01-20 vom reprex-Paket (v0.3.0)