2016-01-19 2 views
2

Мне нужно сделать сложную гистограмму с двумя разными переменными. Существует переменная, называемая T1, а другая переменная называется T2. Эти две переменные имеют два разных состояния: одно, что было раньше, и другое, что произошло после. Я хочу иметь один участок, где я покажу и T1, и T2 в одном столбце, их состояние до и после, но с использованием двух разных цветов (тот, который указывает состояние раньше, а другое, указывающее состояние после).Как создать пользовательскую легенду, когда сюжет накладывается на другой, используя ggplot?

Это фрагмент кода я до сих пор:

pre <- as.data.frame(matrix(nrow=2,ncol=2,byrow=TRUE,c(60,"T1",40,"T2"))) 
post <- as.data.frame(matrix(nrow=2,ncol=2,byrow=TRUE,c(70,"T1",50,"T2"))) 
pre$V1 <- as.numeric(as.character(pre$V1)) 
post$V1 <- as.numeric(as.character(post$V1)) 

ggplot() + 
geom_histogram(stat="identity", fill=c(rep("red",2)), data=post, aes(x=V2, y=V1, fill=V2, colour="Before")) + 
geom_histogram(stat="identity", fill=c(rep("green",2)), data=pre, aes(x=V2, y=V1, fill=V2, colour="After")) + 
scale_x_discrete("x axis") + 
scale_y_continuous("y axis", limits = c(0, 100)) + 
scale_colour_manual(values = c("red","green")) 

Так сюжет выглядит удивительным, но мой вопрос теперь, как я могу получить надлежащую легенду? Поэтому мне нужно иметь один цвет для "After", а другой для "Before", но не как строки, а как заполненные поля.

+0

Так что вы хотите красный цвет область только напоминает разницу между «до» и «после» ценностей? – beetroot

ответ

5

Во-первых, поскольку вы делаете штрих-код, используйте geom_bar(). Затем для fill= и color= внутри aes() используйте те же имена, а затем отрегулируйте цвет и заполните с помощью scale_.. функций.

ggplot() + 
    geom_bar(stat="identity", data=post, aes(x=V2, y=V1, fill="Before",color="Before")) + 
    geom_bar(stat="identity", data=pre, aes(x=V2, y=V1, fill="After",color="After")) + 
    scale_x_discrete("x axis") + 
    scale_y_continuous("y axis", limits = c(0, 100)) + 
    scale_fill_manual("Legend",values = c("green","red"))+ 
    scale_color_manual("Legend", values = c("red","green")) 

enter image description here

+0

Это именно то, что я был после! В моем случае сюжет был немного другим, с черной линией в коробке в легенде, однако я поместил 'scale_color_manual (« Легенда », значения = c (« черный »,« черный »)), и теперь это прекрасно! Благодаря! – chao