2016-03-24 2 views
0

Принимая следующий простой пример. Я не могу заставить легенду правильно ассоциировать соответствующие цвета. Где я пошло не так:связанная легенда с geom_ribbon

time <- as.factor(c('A','B','C','D')) 
x <- c(1.00,1.03,1.03,1.06) 
x.upper <- c(0.91,0.92,0.95,0.90) 
x.lower <- c(1.11,1.13,1.17,1.13) 
df <- data.frame(time, x, x.upper, x.lower) 

time <- as.factor(c('A','B','C','D')) 
x2 <- c(1.15,1.08,1.01,1.15) 
x.upper2 <- c(1.10,1.00,1.01,0.95) 
x.lower2 <- c(1.20,1.27,1.05,1.45) 
df2 <- data.frame(time, x2, x.upper2, x.lower2) 

, а затем построить

ggplot()+ 
    geom_point(data = df, aes(time,x)) + 
    geom_ribbon(data = df, aes(x=as.numeric(time), ymax=x.upper, ymin=x.lower), fill="T1", alpha=.5) + 
    geom_point(data = df2, aes(time,x2)) + 
    geom_ribbon(data = df2, aes(x=as.numeric(time), ymax=x.upper2, ymin=x.lower2), fill="T2", alpha=.5) + 
    scale_fill_manual("", 
        breaks = c("T1", "T2"), 
        values = c("pink", "blue")) 

Или, если мы вместо того, чтобы использовать col в aes, цвета не правильно ассоциировать

ggplot()+ 
    geom_point(data = df, aes(time,x)) + 
    geom_ribbon(data = df, aes(x=as.numeric(time), ymax=x.upper, ymin=x.lower, col="T1"), fill="pink", alpha=.5) + 
    geom_point(data = df2, aes(time,x2)) + 
    geom_ribbon(data = df2, aes(x=as.numeric(time), ymax=x.upper2, ymin=x.lower2, col="T2"), fill="blue", alpha=.5) + 
    scale_color_manual("", 
        breaks = c("T1", "T2"), 
        values = c("pink", "blue")) 
+0

Вы хотите, чтобы легенда работала с 'fill =', даже если вы оставили это из 'aes()'? Можете ли вы уточнить, что вы имеете в виду, когда говорите «цвета неправильно связаны». Что вы ожидаете от других? – MrFlick

ответ

1

Является ли это то, что вы хотите?

ggplot()+ 
    geom_point(data = df, aes(time,x)) + 
    geom_ribbon(data = df, aes(x=as.numeric(time), ymax=x.upper, ymin=x.lower, fill="pink"), alpha=.5) + 
    geom_point(data = df2, aes(time,x2)) + 
    geom_ribbon(data = df2, aes(x=as.numeric(time), ymax=x.upper2, ymin=x.lower2, fill="blue"), alpha=.5) + 
scale_fill_manual("", 
        labels = c("T1", "T2"), values=c("pink"="pink","blue"="blue")) 
Смежные вопросы