Jak dodać geom_text lub geom_label z pozycją zależną od rozmiaru geom_point?
To, co próbuję zrobić, to dodać etykietę do punktów utworzonych za pomocą geom_point, które mają zmienną odwzorowaną na rozmiar. Wartość jest również wyświetlana na etykiecie. Tekst lub etykieta powinny być umieszczone tuż pod geom_point, ale osiągnięcie tego za pomocą position_nudge nie wydaje się możliwe.
Mój kod obecnie wygląda następująco (uproszczony):
ggplot(data, aes(x = var1, y = var2) +
geom_point(aes(size = var3)) +
geom_text(aes(label = var3))
Wynik jest taki
ale ja staram się osiągnąć coś takiego:
Czy jest jakiś sposób, aby to osiągnąć w prosty sposób?
Dzięki.
EDYCJA: Próbuję, aby odległość między granicą geom_point a granicą etykiet była stałą wartością.
Odpowiedzi
Mam nadzieję, że jest to wystarczająco inne, aby zasługiwać na inną odpowiedź. Przyznaję, że przeoczyłem trochę na temat tego, co dokładnie chciałeś umieścić etykiety. Więc zasadniczo nie chcesz, aby było to względem środka punktu, ale względem promienia.
Z nostalgią przypomniało mi się moje pierwsze pytanie w tej społeczności , na które, przyznaję, nie rozumiałem odpowiedzi od bardzo dawna.
Podstawowym pomysłem jest nie używanie geom_point , ale użycie ggforce :: geom_circle (lub: geom_ellipse). Możesz użyć promienia, którego używasz do tworzenia, do pozycjonowania etykiet. Wymaga to trochę twardego kodowania, ale jestem pewien, że byłyby sposoby na programowe zdefiniowanie promienia na podstawie twoich ogólnych współrzędnych.
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()
Utworzony 2021-01-2020 przez pakiet reprex (v0.3.0)
Problem można rozwiązać, wyskalując size
i dodając go do vjust
odległości do punktów.
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))
Dane testowe
data <- data.frame(var1 = factor(rep(1:3, 2)),
var2 = factor(rep(1:2, each = 3)),
var3 = c(3, 10, 2, 1, 1, 10))
Posługiwać się nudge
Dzięki Rui za dane. +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 )
Utworzony 2021-01-2020 przez pakiet reprex (v0.3.0)