2016-12-23 7 views
-1

Я хочу построить 2 переменные из 3 различных кадров данных в одной диаграмме рассеяния, а также автоматически построить уравнения каждой линейной зависимости. Я использую следующий код. Однако у меня есть две проблемы: 1) Я получаю графики для тех же значений, а не для всего диапазона (например, df1 = 700 значений, df2 = 350 значений, df3 = 450 значений). Какова роль отказа от НС? потому что я пробовал это в обоих направлениях, и я все еще получаю один и тот же сюжет, и 2) я могу только добавить уравнения в виде текста, что означает запустить функцию lm, а затем добавить relationship вручную на графике. Мне нужно сделать это автоматически. Код, который я использую:Участок 3 или более переменных в одной диаграмме рассеяния с автоматическими уравнениями

ggplot(df1, aes(x=noxppb, y=OX, colour = "red")) + 
    geom_point(colour = "red", shape=2) + # Use hollow circles 
    geom_smooth(method=lm, se = FALSE) + 
    geom_point(data = df1, aes(x=noxppb, y=OX)) + 
    geom_point(colour = "blue", shape=3) + 
    geom_smooth(method = lm, se = F, colour = "blue", data = df2, aes(x=noxppb, y=OX)) + 
    geom_point(colour = "green", shape=4) + 
    geom_smooth(method = lm, se = F, colour = "green", data = df3, aes(x=noxppb, y=OX)) 

Я получаю следующее изображение: enter image description here

Однако я нужно что-то похожее на это: enter image description here

Благодаря

+0

Вам нужно решение ggplot? –

+0

вам не нужны слои 2xN для построения линий и точек из N разных цветов. – baptiste

+0

добавьте столбец цветов к каждому из ваших данных, затем переместите их полностью и используйте этот новый столбец, чтобы сгруппировать их. 'dput' ваших данных. Чтобы сделать воспроизводимый пример. – HubertL

ответ

3

попробовать это,

d <- plyr::mdply(data.frame(a=c(1,2,3), b=c(-1,0,1)), 
       function(a,b) data.frame(x=seq(0,10), y=jitter(a*seq(0,10)+b))) 


equationise = function(d, ...){ 
    m = lm(y ~ x, d) 
    eq <- substitute(italic(y) == a + b %.% italic(x), 
             list(a = format(coef(m)[1], ...), 
              b = format(coef(m)[2], ...))) 
    data.frame(x = Inf, y = d$y[nrow(d)], 
      label = as.character(as.expression(eq)), 
      stringsAsFactors = FALSE) 
} 


eqs <- plyr::ddply(d, "a", equationise, digits = 2) 


ggplot(d, aes(x=x, y=y, colour = factor(a))) + 
    geom_point() + 
    geom_smooth(method = "lm", se = FALSE) + 
    geom_label(data=eqs, aes(label = label), parse=TRUE, hjust=1) 

enter image description here

+0

Я запускаю код, но я не получаю никакого результата и никакой ошибки –

+0

Мне нравится мой код ленивый и функциональный – baptiste

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

  • Нет связанных вопросов^_^