2015-04-26 2 views
2

У меня возникла проблема с получением правильного цвета в легенде и контролем цвета линии для разделения линий регрессии.R ggplot контрольная точка рассеивания в легенде и цвет линии

Выход должен быть рассеянным с женщинами в виде красных квадратов, а самцы - черными точками, а легенда показывает правильный цвет, которого в настоящее время нет.

Во-вторых, линии, изображающие линейную модель, должны быть того же цвета, что и квадраты/точки. (Например, черный для мужчин и красный для женщин)

Это то, что я получил:

http://prntscr.com/6ycwc0

# R version 3.1.2 
# ggplot2_1.0.1 
library(ggplot2) 
# Reproducable Example 
x <- c(20, 14, 19, 25, 17, 17, 18, 16, 8, 10, 25) 
Sex <- c(2,2,2,2,2,1,1,1,1,1,1) 
y <- c(0.116790, 0.065139, 0.362140, -2.328200, -0.348110, 
     1.393600, -0.716200, -2.501600, 3.956400, 1.834400, -3.264200) 
cordata <- data.frame(x,y,Sex) 
cordata$Sex <- factor(cordata$Sex, labels=c("Males","Females")) 

# Actual Plot: 
ggplot(cordata, aes(x=x, y=y,shape=Sex)) +  
    geom_point(data= subset(cordata, cordata$Sex == "Males"), 
      color="black", size = 4, show_guide = TRUE) + 
    geom_point(data= subset(cordata, cordata$Sex == "Females"), 
      color="red", size = 4, show_guide = TRUE) + 

    scale_shape_manual(values=c(15,16)) + 

    guides(fill = guide_legend(override.aes = list(colour = NULL))) + 

    stat_smooth(aes(Sex = "Females"), method = "lm", se = FALSE, 
       color = "red", size = 1.5) + 
    stat_smooth(aes(Sex = "Males"), method = "lm", se = FALSE, 
       color = "black", size = 1.5) 

Кто есть какие-нибудь идеи?

Извините, если это неправильно отправлено; если есть какой-то очевидный ответ где-то ... Но я не смог его найти.

ответ

1

Вместо добавления двух отдельных слоев geom_point и stat_smooth для мужчин и женщин, вы должны сопоставить их colour, как вы уже сделали для shape.

ggplot(cordata, aes(x=x, y=y,shape=Sex,colour=Sex)) +  
    geom_point(size=4) + 
    scale_shape_manual(values=c(16,15)) + 
    scale_colour_manual(values=c("black","red")) + 
    stat_smooth(aes(group=Sex,color=Sex), method = "lm", se = FALSE, 
      size = 1.5) 
+0

спасибо, что это хорошо! – user2673238

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