2016-02-03 2 views
1

Хотя может показаться, что этот вопрос задан много раз, по-видимому, он не имеет (или, по крайней мере, я не могу найти ответ). У меня есть несколько разрозненных фреймов данных, из которых я создаю один ggplot, каждый dataframe предоставляет точки или строки. Я хотел бы переупорядочить легенду, чтобы (в приведенном ниже примере) «точки» выше «lm», но команда «+ guide (guide = guide_legend (reverse = TRUE))« похоже, не работает.Изменить порядок легенд ggplot2 без использования одного основного блока данных?

Любые идеи очень ценятся.

Большое спасибо.

Coding выглядит следующим образом:

`library("ggplot2") 

nnn <- "Name" 
xx<-c(1:27) 
newdata<-c(2732, 2900, 3032, 2811, 2657, 2530, 2521, 2615, 2807, 3022, 3125, 3200, 3308, 3739, 4601, 4236, 3655, 3781, 4119, 4437, 4615, 5009, 5445, 5641, 5623, 5740, 6072) 
Data111yyxx<-data.frame(xx, newdata) 
names(Data111yyxx) <- c("xx", "newdata") 

Datalm <- lm(newdata ~ xx, data = Data111yyxx) 

windows() 
p1 <- ggplot() + ggtitle("mag") + theme(plot.title = element_text(size = 10)) + coord_cartesian(xlim = c(0, 30), ylim = c(0, 8000)) + scale_x_continuous(breaks = c(0, 10, 20, 30), labels = c("0", "10", "20", "30"), expand = c(0, 0)) + scale_y_continuous(breaks = c(0, 4000, 8000), labels = c("0", "4000", "8000"), expand = c(0, 0)) + ylab("Yy") + xlab("Xx") + geom_point(data = Data111yyxx, aes(x = Data111yyxx[ , 1], y = Data111yyxx[ , 2], colour = "points", shape = "points", linetype = "points")) 
xgridA <- data.frame(xx = c(seq(min(xx), max(xx), length.out = 100))) 
fhatA <- as.vector(predict(Datalm, newdata = xgridA)) 
dataframexgridA <- data.frame(xgridA, fhatA) 
colnames(dataframexgridA) <- c("xxforfit", "gomforfit") 
xgridAA <- as.vector(unlist(xgridA)) 
q2 <- p1 + geom_line(data = dataframexgridA, aes(x = xgridAA, y = fhatA, colour = "lm", shape = "lm", linetype = "lm")) + scale_colour_manual(' ', values = c("points" = "black", "lm" = "black")) + scale_shape_manual(' ', values = c("points" = 16, "lm" = NA)) + scale_linetype_manual(' ', values = c("points" = 0, "lm" = 1)) + guides(guide = guide_legend(reverse = TRUE)) 
q2 

`

+1

Мне кажется, ваши делают вашу жизнь немного слишком трудно. Следующее может сделать трюк: 'ggplot (data = Data111yyxx, aes (x = xx, y = newdata)) + geom_point() + geom_smooth (method =" lm ", se = FALSE) + xlim (c (0, 30)) + ylim (c (0, 8000)) ' –

ответ

1

Согласитесь, что говорит Александр, вы код необходимо некоторое внимание. Но это, кажется, чтобы дать вам то, что вы хотите, основываясь на том, что вы уже написали:

library("ggplot2") 

nnn <- "Name" 
xx<-c(1:27) 
newdata<-c(2732, 2900, 3032, 2811, 2657, 2530, 2521, 2615, 2807, 3022, 3125, 3200, 3308, 3739, 4601, 4236, 3655, 3781, 4119, 4437, 4615, 5009, 5445, 5641, 5623, 5740, 6072) 
Data111yyxx<-data.frame(xx, newdata) 
names(Data111yyxx) <- c("xx", "newdata") 

Datalm <- lm(newdata ~ xx, data = Data111yyxx) 
xgridA <- data.frame(xx = c(seq(min(xx), max(xx), length.out = 100))) 
fhatA <- as.vector(predict(Datalm, newdata = xgridA)) 
dataframexgridA <- data.frame(xgridA, fhatA) 
colnames(dataframexgridA) <- c("xxforfit", "gomforfit") 
xgridAA <- as.vector(unlist(xgridA)) 

windows() 


ggplot() + 
     ggtitle("mag") + 
     theme(plot.title = element_text(size = 10)) + 
     coord_cartesian(xlim = c(0, 30), ylim = c(0, 8000)) + 
     scale_x_continuous(breaks = c(0, 10, 20, 30), labels = c("0", "10", "20", "30"), expand = c(0, 0)) + 
     scale_y_continuous(breaks = c(0, 4000, 8000), labels = c("0", "4000", "8000"), expand = c(0, 0)) + 
     ylab("Yy") + 
     xlab("Xx") + 
     geom_point(data = Data111yyxx, aes(x = Data111yyxx[ , 1], y = Data111yyxx[ , 2], colour = "points", shape = "points", linetype = "points")) + 
     geom_line(data = dataframexgridA, aes(x = xgridAA, y = fhatA, colour = "lm", shape = "lm", linetype = "lm")) + 
     scale_colour_manual(' ', values = c("points" = "black", "lm" = "black"), guide = guide_legend(reverse=TRUE)) + 
     scale_shape_manual(' ', values = c("points" = 16, "lm" = NA), guide = guide_legend(reverse=TRUE)) + 
     scale_linetype_manual(' ', values = c("points" = 0, "lm" = 1), guide = guide_legend(reverse=TRUE)) 

enter image description here

Смежные вопросы