[R] Plot Many Data to same plot

Jim Lemon jim at bitwrit.com.au
Wed Feb 22 08:33:16 CET 2012


On 02/21/2012 11:56 PM, Alaios wrote:
> Dear all,
> I have a function that for a variable number of inputs plots them to the same plot
> I am doing this quite simply by
>
> plot(seq(from=start, to=stop, length.out=np), datalist[[1]]$dataset
>                   xlim=c(start, stop), ylim=c(0, 1), type="l")
>
>          if (length(datalist)>  1) {
>                  for (i in 2:length(datalist)) {
>                          np<- length(datalist[[i]]$dataset)
>                          lines(seq(from=start, to=stop, length.out=np), datalist[[i]]$dataset$, lty=i)
>                  }
>          }
>
> as you can see, specifically this line
>
>       lines(seq(from=start, to=stop, length.out=np), datalist[[i]]$dataset$ lty=i)
>
> is changing the line type so any different input is plotted with different line type.
>
> This works quite well for 6 lines but if the arguments are more than 6 (in my case 7) the line type starts from the beginning. Is it possible to keep that loop and have the lines produced in plots a bit more customized (like lines with squares and or cubes).
>
> I have already checked in the ?par
> but I can not find how I can modify the line in that sense, and especially doing this smart inside a for loop.
>
>
Hi Alex,
The easiest way is to define a vector of more line types and then step 
through that vector. Here is one with the default five broken lines and 
five more that are reasonably distinguishable:

mylinetypes=c("44", "13", "1343", "73", 
"2262","7272","5331","3366","2714","6224")
plot(1:10,type="n")
for(i in 1:10) abline(h=i,lty=mylinetypes[i])

Work out a way to generate different line types automatically? You might 
be able to do this by some tricky algorithm that applied a sequence like 
(+3,-2,+1,-1) to your index and then rotating the sequence on each 
iteration, BUT, your plot would still probably look like a mess with 
more than ten lines.

Jim



More information about the R-help mailing list