Как поместить легенды в пики нескольких дистрибутивов с помощью ggplot? - PullRequest
0 голосов
/ 10 января 2019

Я хочу разместить легенду каждой гистограммы над ее пиком вместо правой части цифры в R. Позвольте мне объяснить это с помощью набора псевдоданных:

a <- rnorm(100, mean = 20, sd = 1)
b <- rnorm(100, mean = 22, sd = 1)
aleg <- rep("A",length(a))
bleg <- rep("B",length(b))
data <- data.frame(value=c(a,b), variable=c(lega,legb))
ggplot(data,aes(x=value, fill=variable)) + geom_density(alpha=0.25) + labs(fill="")

, что дает вам:

enter image description here

Вот что я хочу:

enter image description here

У меня большой набор данных, в котором ~ 8 разных переменных. Вот почему я хочу быстрое решение вместо добавления отдельных текстовых полей.

Заранее спасибо!

1 Ответ

0 голосов
/ 10 января 2019

Как это?

library(ggplot2)

set.seed(1)
a <- rnorm(100, mean = 20, sd = 1)
b <- rnorm(100, mean = 22, sd = 1)
aleg <- rep("A",length(a))
bleg <- rep("B",length(b))

data <- data.frame(value=c(a,b), variable=c(aleg,bleg))

labels <-
  lapply(split(data, data$variable), function(x){
    dens <- density(x$value)  # compute density of each variable

    data.frame(y = max(dens$y),  # get maximum density of each variable
               x = dens$x[which(dens$y == max(dens$y))],  # get corresponding x value
               label = x$variable[1])
  })

ggplot(data,aes(x=value, fill=variable)) + 
  geom_density(alpha=0.25) + 
  geom_text(data = do.call(rbind, labels), aes(x = x, y = y, label = label), 
            inherit.aes = F, 
            nudge_y = 0.03) +
  labs(fill="")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...