Неправильная легенда в выводе ggplot - PullRequest
0 голосов
/ 03 мая 2020

Выходные данные этого кода дают распределение и две вертикальные линии, одну красную и одну синюю. Но в легенде синяя линия помечена «красной» и наоборот. В чем может быть причина? Распределение и 2 вертикальные линии

variances <- apply(matrix(rexp(40*1000,0.2),1000),1,var) 
hist(variances)
v_theo <- 45 ## need to define v_theo
g <- ggplot(data.frame(x=variances), aes(x = x)) 
g <- g + geom_density(alpha=0.2,size=1,fill="red")
g <- g + geom_vline(aes(xintercept = mean(variances),color="red"), size=1) 
g <- g + geom_vline(aes(xintercept = (v_theo),color="blue"), size=1) 
g

Ответы [ 2 ]

1 голос
/ 03 мая 2020
library(ggplot2)
variances <- apply(matrix(rexp(40*1000,0.2),1000),1,var) 
hist(variances)
v_theo <- 45


g <- ggplot(data.frame(x=variances), aes(x = x)) 
g <- g + geom_density(alpha=0.2,size=1,fill="red")
g <- g + geom_vline(aes(xintercept = v_theo, color="blue"), size=1) 
g

enter image description here

g <- ggplot(data.frame(x=variances), aes(x = x)) 
g <- g + geom_density(alpha=0.2,size=1,fill="red")
g <- g + geom_vline(aes(xintercept = mean(variances),color="mean"), size=1) 
g <- g + geom_vline(aes(xintercept = v_theo,color="v_theo"), size=1) +
  scale_color_manual(name = "Legend name", values = c(mean = "red", v_theo = "blue"))
g

enter image description here

См. Также здесь: Добавить легенду в geom_vline

0 голосов
/ 03 мая 2020

Это потому, что цвета отображаются с помощью функции aes. Если вы хотите отобразить их вручную, вы можете либо вынуть их из aes, как это

variances <- apply(matrix(rexp(40*1000,0.2),1000),1,var) 
hist(variances)
g <- ggplot(data.frame(x=variances), aes(x = x)) 
g <- g + geom_density(alpha=0.2,size=1,fill="red")
g <- g + geom_vline(aes(xintercept = mean(variances)), color="red", size=1) 
g <- g + geom_vline(aes(xintercept = (v_theo)), color="blue", size=1) 
g

Вы потеряете леген, хотя сделав это. Если вы хотите легенду, вы можете использовать scale_color_manual, чтобы установить порядок цветов.

variances <- apply(matrix(rexp(40*1000,0.2),1000),1,var) 
hist(variances)
g <- ggplot(data.frame(x=variances), aes(x = x)) 
g <- g + geom_density(alpha=0.2,size=1,fill="red")
g <- g + geom_vline(aes(xintercept = mean(variances),color="red"), size=1) 
g <- g + geom_vline(aes(xintercept = (v_theo),color="blue"), size=1) 
g <- g + scale_color_manual(values = c("blue", "red"))
g
...