[R] problem with the behaviour of dashed lines in R plots

Sarah Goslee sarah.goslee at gmail.com
Mon Dec 4 18:30:31 CET 2017


Hi,

It's because you are plotting a line between each of the points in
your data frame, and they are very close together:

> cbind(df1$B,predict(regressor,df1))
       [,1]      [,2]
1  1.410832 -13.96466
2  1.589383 -15.21169
3  1.446662 -14.21491
4  1.488665 -14.50826
5  1.487035 -14.49687
6  1.497347 -14.56890
7  1.458070 -14.29458
8  1.568134 -15.06328
9  1.543364 -14.89029
10 1.513473 -14.68152
11 1.465462 -14.34621
12 1.506752 -14.63458
13 1.434703 -14.13139
14 1.584011 -15.17417
15 1.585621 -15.18542
16 1.542410 -14.88362
17 1.430091 -14.09917
18 1.474529 -14.40953
19 1.431341 -14.10790
20 1.425015 -14.06372

If instead you use abline(regressor, lty=2) you will get a
nice-looking dashed line.

Or, if you want only the data extent, you could use just the points
for the minimum and maximum values of x.

Sarah

On Mon, Dec 4, 2017 at 12:13 PM, jean-philippe
<jeanphilippe.fontaine at gssi.infn.it> wrote:
> dear R users,
>
> I am performing a linear regression with lm, and I would like to plot the
> regressor in dashed lines. I know that the lty=2 option is the way out, but
> it has a very strange behaviour: the line starts dashed but then the spaces
> between each dash becomes very tiny and so the line become somehow
> continuous for the human eye. Do you know how to fix that problem, in order
> to have a dashed line with big enough spaces between the dashes?
> Here is a MWE (don't mind if clearly a linear model will not fit these "fake
> randomly generated" data).
>
> Also, changing the plot(...,type="l") to abline(regressor,lty=2,...) helps
> and draw a pure dashed line but it is impossible to force it to stay in the
> bounds of the data.
> Changing to line instead shows the same problem as mentioned here in the
> MWE.
>
>
> pdf("reproducableex.pdf")
> df1<-data.frame(B=runif(20,1.4,1.6),A=runif(20,-19.5,-9.8))
> regressor<-lm(A~B,data = df1)
> plot(df1$B,predict(regressor,df1),type="l", col="black",
> mgp=c(2,0.5,0),cex.lab=1.6, lwd=2,
> lty=2,xlim=range(c(1.2,1.7)),ylim=rev(range(c(-19,-8))))
> par(new = TRUE)
> plot(df1$B,as.numeric(df1$A),type="p", col="black",
> mgp=c(2,0.5,0),cex.lab=1.6,cex=2, xlab = "", ylab =
> "",xlim=range(c(1.2,1.7)),ylim=rev(range(c(-19,-8))),pch=17)
> box(lwd=3)
> dev.off()
>
>
> Thanks in advance, best regards
>
>
> Jean-Philippe Fontaine
>


-- 
Sarah Goslee
http://www.functionaldiversity.org



More information about the R-help mailing list