2014-10-01 3 views
2

Мне удалось создать диаграмму рассеяния с двумя наборами данных на одном участке. Один набор данных имеет ось X, которая колеблется от 0 -40 (зеленый), а другая только от 0 до15 (красный).Настройка длины линии тренда в R

(http://s9.postimg.org/fw48s8rq7/Rplot.jpg)

Я использовал этот код для добавления линии тренда к красным и зеленым данным по отдельности (с использованием пара (новый)).

plot(x1,y1, col="red", axes=FALSE, xlab="",ylab="",ylim= range(0:1), xlim= range(0:40)) 
f <- function(x1,a,b,d) {(a*x1^2) + (b*x1) + d} 
fit <- nls(y1 ~ f(x1,a,b,d), start = c(a=1, b=1, d=1)) 
co <- coef(fit) 
curve(f(x, a=co[1], b=co[2], d=co[3]), add = TRUE, col="red", lwd=1) 

Моя проблема заключается в том, что я не могу найти способ остановить красную линию тренда на 15 по оси х. Я «googled» вокруг и ничего, казалось, не придумал для моей проблемы. Много на линиях трендов Excel! Я устал добавлять конец = заявление для соответствия < - и это тоже не сработало.

Пожалуйста, помогите,

Я надеюсь, что я отправил достаточно информации. Заранее спасибо.

+0

Thanks @nograpes. Я не смог опубликовать фотографию из-за недостатка опыта. – User67539586

ответ

0

Вы можете сделать это в базовых графиках с from и to аргументами функции curve (см справки curve для более подробной информации). Например:

# Your function 
f <- function(x1,a,b,d) {(a*x1^2) + (b*x1) + d} 

# Plot the function from x=-100 to x=100 
curve(f(x, a=-2, b=3, d=0), from=-100, to=100, col="red", lwd=1, lty=1) 

# Same curve going from x=-100 to x=0 (and shifted down by 1000 units so it's 
# easy to see) 
curve(f(x, a=-2, b=3, d=-1000), from=-100, to=0, 
     add=TRUE, col="blue", lwd=2, lty=1) 

enter image description here

Если вы хотите установить кривую рентгеновским пределы программно, вы можете сделать что-то вроде этого (предполагая, что ваш кадр данных называется df и ваш х-переменная называется x) :

curve(f(x, a=-2, b=3, d=0), from=range(df$x)[1], to=range(df$x)[2], 
     add=TRUE, col="red", lwd=1, lty=1) 
+0

Отлично! Спасибо! – User67539586

1

Попробуйте использовать ggplot. Следующий пример использует mtcars данные:

library(ggplot2) 
ggplot(mtcars, aes(qsec, wt, color=factor(vs)))+geom_point()+ stat_smooth(se=F) 

enter image description here

+1

Я думаю, что вы можете просто выполнить 'geom_smooth (se = FALSE)' вместо двух вызовов stat_smooth. – eipi10

+0

Спасибо за предложение. Я пробовал это раньше, но это не сработало, потому что в то время я использовал color = vs, а не color = factor (vs) – rnso

+0

Также полезно знать. Спасибо за ваш ответ. Я еще не получил ручку на ggplot, и все мои другие графики находятся в том же формате, что и выше. – User67539586