2017-01-05 6 views
0

Я создал панель с использованием barplot, а затем я хочу показать линейный тренд. Я использую abline, но линейная линия тренда не показана на рисунке. Интересно, в чем проблема. Благодарю.Невозможно добавить линейную линию тренда на баррель в R

set.seed(100) 
Mydata=rnorm(65) 
Year=1950:2014 
barplot(Mydata) 
fit=lm(Mydata~Year) 
abline(fit) 

enter image description here

Как @ G5W указывает, fit=lm(Mydata~I(Year-1950)). Но новая проблема заключается в том, что линия тренда слишком «длинная». Как показано на втором рисунке, линия тренда выходит за баррель. Есть ли совет?

enter image description here

+1

Вместо 'barplot', попробуйте' участок (год, MyData, тип = 'ч') ' – bouncyball

+1

Или, если вы хотите остаться с barplot, изменить ое заявление, чтобы быть' подходят = лм (MyData ~ I (Год-1950)) '. Проблема заключается в том, что x-координаты штрихового кода не являются номерами года, – G5W

+0

@ G5W. Он показывает линейную линию тренда, но перехват и наклон не совпадают с результатами, полученными при использовании 'lm (Mydata ~ Year) '. Это может быть проблемой. Не могли бы вы подробнее рассказать о своем коде? Большое спасибо. –

ответ

3

Если вы можете использовать ggplot:

library(ggplot2)  

df <- data.frame(Mydata, Year) 

ggplot(df, aes(x = Year, y = Mydata)) + 
    geom_bar(stat = "identity") + 
    geom_smooth(method = "lm") 

enter image description here

+0

Спасибо, ggplot - очень полезный инструмент. Если я хочу использовать красный и зеленый цвет для данных> = 0 и данных <0, соответственно, как я могу это сделать? Большое спасибо. –

+1

ggplot (df, aes (x = год, y = Mydata)) + geom_bar (stat = "identity", aes (fill = as.factor (Mydata> = 0))) + geom_smooth (method = "lm") + scale_fill_manual (значения = c ("red", "darkgreen")) + руководства (fill = FALSE) –

+0

Большое вам спасибо за ваш ответ. –

1

Чтобы расширить на @ bouncyball свой комментарий, используйте более высокое значение ширины линии (lwd) походить barplot, если вы хотите ,

plot(Year, Mydata, type = 'h',lwd=5,col = "grey") 
abline(fit, lty =2) 

EDIT

Первая копия этой функции

barplot2 <- function(x, y, lty = 1, lwd = 1, col = "grey", border = "black"){ 
w = ((max(x) - min(x))/length(x)) * 0.75 
plot(x, y, type = 'p', pch = NA, yaxt = "n", xaxt = "n", xlab = "", ylab = "") 
for (i in 1:length(x)){ 
x1 = x[i] - w/2 
x2 = x[i] + w/2 
y1 = 0 
y2 = y[i] 
polygon(x = c(x1,x2,x2,x1), y = c(y1,y1,y2,y2), lty = lty, lwd = lwd, col = col, border = border) 
} 
} 

Затем сделать barplot

barplot2(Year,Mydata) 

Затем добавьте ablineclip из plotrix библиотеки

ablineclip(fit, x1 = min(Year), x2 = max(Year), y1 = min(Mydata), y2 = max(Mydata)) 

enter image description here

+0

Таким образом, график не является строкой, даже если вы увеличиваете ширину линии. –

+1

Благодарим за помощь. –