[R] Multiple plots per window

Gabor Grothendieck ggrothendieck at gmail.com
Mon Sep 22 03:21:21 CEST 2008


Here are two ways: one using classic graphics and one much
shorter way using lattice.   ggplot2 would be a another short way
(not shown).

Lines <- "1995 1996 1997 1998
  153  133  145  111
  189  177  200  170
  221  241  187  243
  215  228  201  178
  302  283  292  248
  223  255  220  202
  201  238  233  163
  173  164  172  139
  121  128  119  120
  106  108   81   96
   86   87   65   95
   87   74   76   53
  108   95   74   94"

# read in data and remove the X from the column names
s <- read.table(textConnection(Lines), header = TRUE)
names(s) <- sub("X", "", names(s))

# 1. using classic graphics

# find overall ranges of x and y
h <- lapply(s, hist, probability = TRUE)
ylim <- range(unlist(lapply(h, "[[", "density")))
xlim <- range(unlist(lapply(h, "[[", "breaks")))

# plot
opar <- par(mfrow = c(2, 2))
for(i in 1:length(s)) {
 hist(s[[i]], main = names(s)[i], probability = TRUE,
	xlab = "Sales", xlim = xlim, ylim = ylim)
 lines(density(s[[i]]))
}
par(opar)

# 2. using lattice its a bit easier

library(lattice)
histogram( ~ values | ind, stack(s), type = "density",
	panel = function(...) {
		panel.histogram(...)
		panel.densityplot(...)
	}
)



On Sun, Sep 21, 2008 at 7:19 PM,  <p at fo76.org> wrote:
> sorry, as Mark Leeds pointed out to me, the row/column numbers where
> mixed up in my example... happens when you cut & paste like mad from
> your history... it should read as follows:
>
> sales2.1 <- c(153,189,221,215,302,223,201,173,121,106,86,87,108,
> 133,177,241,228,283,255,238,164,128,108,87,74,95,
> 145,200,187,201,292,220,233,172,119,81,65,76,74,
> 111,170,243,178,248,202,163,139,120,96,95,53,94)
>
> sales2.1.matrix <- sales2.1
> dim(sales2.1.matrix) <- c(13,4)
>
> sales2.1.dataframe <- as.data.frame(sales2.1.matrix)
> names(sales2.1.dataframe) <- c("1995","1996","1997","1998")
>
> Peter
>
> Quoting p at fo76.org:
>
>> Hi all,
>>
>> I'm currently working through "The Analysis of Time Series" by Chris
>> Chatfield. In order to also get a better understanding of R, I play
>> around with the examples and Exercises (no homework or assignement,
>> just selfstudy!!).
>>
>> Exercise 2.1 gives the following dataset (sales figures for 4 week
>> intervals):
>>
>>> sales2.1.dataframe
>>
>>   1995 1996 1997 1998
>> 1   153  133  145  111
>> 2   189  177  200  170
>> 3   221  241  187  243
>> 4   215  228  201  178
>> 5   302  283  292  248
>> 6   223  255  220  202
>> 7   201  238  233  163
>> 8   173  164  172  139
>> 9   121  128  119  120
>> 10  106  108   81   96
>> 11   86   87   65   95
>> 12   87   74   76   53
>> 13  108   95   74   94
>>
>> I want to plot the histograms/densities for all four years in one window.
>> After trying out a couple of things, I finally ended up with the following
>> (it took me two hours - Ouch!):
>>
>> sales2.1 <- c(153,189,221,215,302,223,201,173,121,106,86,87,108,
>> 133,177,241,228,283,255,238,164,128,108,87,74,95,
>> 145,200,187,201,292,220,233,172,119,81,65,76,74,
>> 111,170,243,178,248,202,163,139,120,96,95,53,94)
>> sales2.1.matrix <- sales2.1
>> dim(sales2.1.matrix) <- c(4,13)
>> sales2.1.dataframe <- as.data.frame(sales2.1.matrix)
>> names(sales2.1.dataframe) <- c("1995","1996","1997","1998")
>>
>> X11()
>> split.screen(c(2,2))
>> for (i in 1:4)
>> {
>>    screen(i)
>>    hist(sales2.1.dataframe[[i]],
>>        probability=T,
>>        xlim=c(0,400),
>>        ylim=c(0,0.006),
>>        main=names(sales2.1.dataframe)[i],
>>        xlab="Sales")
>>    lines(density(sales2.1.dataframe[[i]]))
>> }
>> close.screen(all=TRUE)
>>
>> Although I'm happy that I finally got something that is pretty close
>> to what I wanted, I'm not sure whether this is the best or most elegant
>> way to do it. How would you do it? What functions/packages should I
>> look into, in order to improve these plots?
>>
>> Thanks in advance for your comments and suggestions,
>>
>> Peter
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
>> http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>



More information about the R-help mailing list