简体   繁体   中英

How to add a trendline to a two variables, two y-axes plot in r?

I have this dataset

structure(list(Year = 1988:2012, A = c(1415.6, 1345.3, 1321.7, 
1234.5, 1567.8, 1476.6, 1610.1, 1422.6, 1209.1, 1249.3, 1377.5, 
1525.7, 1683.7, 1500.1, 1565.3, 1737.4, 1321, 1477.8, 1642, 1608.1, 
1427.8, 1608.2, 1404.4, 1688.3, 1795.4), B = c(76, 359, 299, 
215, 177, 3112, 12047, 26307, 27173, 6514, 4190, 1776, 1708, 
1335, 1012, 8170, 4306, 3716, 23531.986, 34803.012, 22758.7645, 
29140.16304, 36369.3619, 56975.62256, 33516.95628)), .Names = c("Year", 
"A", "B"), class = "data.frame", row.names = c(NA, -25L))

and I created this plot with the twoord.plot function:

install.packages("plotrix")
library(plotrix)

twoord.plot(Example$Year, Example$B, Example$Year, Example$A, xlim = range(1988:2012))
abline(lm(B ~ Year, data = Example), col="black")
abline(lm(A ~ Year, data = Example), col="red")

在此输入图像描述

How should I tell to the second trendline (the red one) that it belongs to the righ hand y-axis? Is it possible to do it in r?

I guess R knows only one scale for x and one for y. If you have a look into the function twoord.plot you can see that it adds the right hand plot with a scaling-offest operation :

points(rx, ry * ymult + yoff, col = rcol, pch = rpch, 
    type = type[2], ...)

my guess is that you have to do the same to add extra lines. Just selecting some lines into the function, it should be ( ly = Example$B and ry = Example$A ) :

lylim <- range(ly, na.rm = TRUE)
rylim <- range(ry, na.rm = TRUE)
ymult <- diff(lylim)/diff(rylim)
yoff <- lylim[1] - rylim[1] * ymult
coef = lm(A ~ Year, data = Example)$coefficients
abline(a = coef[1]*ymult + yoff, b = coef[2]*ymult, col="red")

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM