data > opinion

Tom Alby

Text in Plots entlang von Linien plotten

Package Build / 2022-01-14


Texte in Grafiken können einem den letzten Nerv rauben, vor allem wenn der Text gerade ist und die Linie krumm. Abhilfe schafft das Package geomtextpath, das sich an ggplot orientiert. Mit remotes::install_github(“AllanCameron/geomtextpath”) kann es installiert werden. Beim Laden bringt es ggplot2 gleich mit.

library(geomtextpath)
## Loading required package: ggplot2

Ich nutze zunächst zwei Beispiele von der Entwickler-Website auf GitHub. geomtextpath bietet zusätzliche Befehle, unter anderem geom_textpath und geom_labelpath, die wie alle anderen geoms in ggplot eingebettet werden können:

ggplot(pressure, aes(temperature, pressure)) +
  geom_textline(label = "Mercury vapor pressure", size = 6, vjust = -0.5,
                linewidth = 1, linecolor = "red4", linetype = 2, 
                color = "deepskyblue4")

geom_textdensity ist, wie der Name schon sagt, für Density Plots gedacht.

ggplot(iris, aes(x = Sepal.Length, colour = Species, label = Species)) +
  geom_textdensity(size = 6, fontface = 2, hjust = 0.15, vjust = 0.3) +
  theme(legend.position = "none")

FÜr jedes Geom, das man mit einem Label versehen möchte, muss man also zunächst schauen, ob es dafür ein Äquivalent gibt. Richtig nice wird es, wenn wir eine Formel an einen Graphen plotten wollen:

lab <- expression(paste("y = ", frac(1, sigma*sqrt(2*pi)), " ",
                            plain(e)^{frac(-(x-mu)^2, 2*sigma^2)}))

df <- data.frame(x = seq(-2, 0, len = 100),
                 y = dnorm(seq(-2, 0, len = 100)),
                 z = as.character(lab))

ggplot(df, aes(x, y)) + 
  geom_textpath(aes(label = z), vjust = -0.2, hjust = 0.1, size = 8, parse = TRUE)

Tags: