Lattice plot in r

Lattice plot in r DEFAULT

R Graphics using lattice

We will work with a mouse dataset, containing “gene expression profiles of purified photoreceptors at distinct developmental stages and from different genetic backgrounds”. The microarray platform was Affymetrix mouse genomic expression array 430 2.0.

Load the photoRec (mini) data

We see there are 39 samples (rows or observations). We have

It's pretty clear the intent was to have 4 mice at each combination of genotype and developmental stage, but there was some mishap for the embryonic knockouts, i.e. E16-NrlKO, where we only have data from 3 mice.


The most important plot type is arguably the scatterplot. The lattice function for this is xyplot(). Let's plot the expression data for two of these genes against each other using the lattice function xyplot().

To write the figure to file with an R code precede the figure-making code by opening a graphics device and follow it with a command that closes the device. You can view the file whatever way is appropriate to your OS. It's a silly figure but we've shown the process. Don't be surprised when you don't see any figure appear in your screen device. While you're sending graphics output to, e.g., the pdf() device, you'll be “flying blind”, which is why it's important to work out the graphics commands in advance.

lattice graphing functions, like many other functions in R, utilize a special formula syntax and that is what is expected as the first inputted argument. The general form is y ~ x, read as “y twiddle x”. Here it requests that the first variable, eggBomb, be associated with the y direction and the second, crabHammer, be associated with x. The second argument kDat specifies the data.frame where the variables eggBomb and crabHammer can be found. It is being matched against the formal argument data by its position. As with the formula syntax, the use of a data argument, usually in the second position, is common in R, though sadly not universal. Take advantage of it whenever you can!

You try: request a scatterplot of the variable poisonFang against crabHammer.

plot of chunk Fig2_scatter_poisonFang_vs_crabHammer

Plotting two response variables against explanatory variable

Let's imagine that crabHammer is somehow a natural explanatory variable or predictor (weird here, I admit, but go with me) and eggBomb and poisonFang are natural response variables. We might want to see both responses plotted against crabHammer at the same time. Here is a first way to do so, using a bit of a cheat known as the “extended formula interface” in lattice.

plot of chunk Fig3_scatter_poisonFangANDeggBomb_vs_crabHammer

The “+” sign between the two response variables is, in this context, purely artificial, i.e. we don't literally add them up and scatterplot the sum against crabHammer. Read it as “and”. We've added auto.key = TRUE which produces the legend at the top and is a great convenience. Custom legends are absolutely possible but don't go there until you need to!

What if we want each response to have it's own scatterplot, but we want to put them side-by-side for comparison?

plot of chunk Fig4_scatter_poisonFangANDeggBomb_vs_crabHammer_separate

The addition of outer = TRUE has caused the information to be presented in two panels, which is the lattice term for the individual plotting cells. The addition of a background grid, via grid = TRUE, is a great help for viewers who want to make comparisons across panels.

What if we'd like to know which points are from the wild type mice versus the Nrl knockouts?

plot of chunk Fig5_scatter by gType

The more proper way to make this last figure requires us to reshape the data.

The lattice paradigm is for panels to correspond to a level of a factor or to a unique combination of levels of two or more factors.

Since reshaping is a topic in and of itself, we present the reshaping code without explanation here.

Our reshaped dataset nDat has 78 observations of 7 variables, whereas kDat had 39 = 78 / 2 observations of 7 variables. The variables sidChar, sidNum, devStage, gType, and crabHammer have simply been repeated twice, resulting 39 * 2 = 78 rows. The variables eggBomb and poisonFang have been concatenated into a new variable geneExp with a new factor probeset identifying which gene the data is for.

Now we can make the previous plot with more canonical lattice syntax, i.e. this workflow and way of thinking will serve you better in the future:

plot of chunk Fig6_proper scatter by gType

We are using another feature of the formula syntax, y ~ x | z, which requests a scatterplot of y versus x for each level of the factor z. In general, in lattice plots the use of the vertical bar | requests individual plots in panels for each value of the factor specified on the right.

You try: Remake this plot but instead of conveying genotype via color, show developmental stage.

plot of chunk Fig7_proper scatter by devStage


The next set of figures we will make requires yet more data reshaping, which is a substantial background task in many analyses. We drop the idea of crabHammer being a predictor and eggBomb and poisonFang being responses and we just treat them all equivalently.

Our newly reshaped version of kDat, named oDat, has 39 * 3 = 117 observations but is otherwise very similar to nDat.

A stripplot is a univariate scatterplot. Let's inspect the gene expression data, plain and simple.

plot of chunk Fig8_simple stripplot

Pretty boring and slightly nonsensical! We had to start somewhere.

Let's split things out for the three different genes.

plot of chunk Fig9_stripplot for the 3 genes

Sometimes, it can help to add jitter, a small bit of meaningless noise, in the horizontal position.

plot of chunk Fig10_stripplot with jitter

Notice that all the data is presented in one panel but with the different genes corresponding to different locations in the y direction.

What if we want to put the different genes in different panels?

plot of chunk Fig11_stripplot in diff panels

What if we want to see information about wild type versus Nrl knockout?

plot of chunk Fig12_stripplot panels with gType coding

Let's start exploring gene expression changes over the course of development.

plot of chunk Fig13_Expr change across devStage

Retaining one panel per gene ….

plot of chunk Fig14_Expr change across devStage_panels

Adding back the genotype information ….

plot of chunk Fig15_Expr change across devStage_panels coded by gType

Adding averages

plot of chunk Fig16_stripplot with averages

The argument 'type' can be used to add a variety of enhancements. Type is specified as a vector (through the use of 'c'). The option 'p' in the above example specifies the data as points on the plot, 'a' refers to getting the average of each category and joining them by a line (other summaries can be requested too). Some of the other options include 'l' for joining points by lines, 'b' for both points and lines, 'r' for adding the fit from a simple linear regression and 'smooth' for adding a nonparametric “smooth” fitted curve.

plot of chunk unnamed-chunk-4

plot of chunk unnamed-chunk-4

plot of chunk unnamed-chunk-4

Density plot

Here's a nice alternative to histograms!

plot of chunk unnamed-chunk-5

The vertical bar works as usual.

plot of chunk unnamed-chunk-6

groups works as usual – a real advantage over histogram.

plot of chunk unnamed-chunk-7

The argument 'bw' specifies the bandwidth or the spread of the underlying Gaussian distributions.

It controls how smooth this smoothed histogram will be. Though densityplot() has a sensible default, you can always specify directly if you wish. The argument 'n' controls the number of points at which the kernel density estimate is evaluated. It is easy to confuse this with the usual use of 'n' to denote sample size, so beware. If your density looks jaggedy, try increasing 'n'.

plot of chunk unnamed-chunk-8

You try: use densityplot() to explore the gene expression distribution by gene and/or developmental stage. Play with 'bw' and 'n' if you like.

plot of chunk unnamed-chunk-9

plot of chunk unnamed-chunk-9

plot of chunk unnamed-chunk-9


There is also a time and place for boxplots, obtained with the lattice function bwplot() for “box-and-whiskers plot”.


Lattice Graphs

Previously, we described the essentials of R programming and provided quick start guides for importing data into R. We also showed how to visualize data using R base graphs.

Here, we’ll present the basics lattice package, which is a powerful and elegant data visualization system that aims to improve on base R graphs.
xyplot()Scatter plot
splom()Scatter plot matrix
cloud()3D scatter plot
stripplot()strip plots (1-D scatter plots)
bwplot()Box plot
dotplot()Dot plot
barchart()bar chart
densityplotKernel density plot
qqmath()Theoretical quantile plot
qq()Two-sample quantile plot
contourplot()3D contour plot of surfaces
levelplot()False color level plot of surfaces
parallel()Parallel coordinates plot
wireframe()3D wireframe graph

Note that, other functions (ecdfplot() and mapplot()) are available in the latticeExtra package.

  • R function: The R function xyplot() is used to produce bivariate scatter plots or time-series plots. The simplified format is as follow:
  • Basic scatter plot: y ~ x

  • Multiple panels by groups: y ~ x | group

  • Scatter 3D plot: z ~ x * y

  • Basic plot: Plot len by dose

  • Plot with multiple groups: Additional argument layout is used: c(3, 1) specifying the number of column and row, respectively

  • Plot with multiple groups

This analysis has been performed using R statistical software (ver. 3.2.4).

Enjoyed this article? I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Twitter, Facebook or Linked In.

Show me some love with the like buttons below... Thank you and please don't forget to share and comment below!!
Avez vous aimé cet article? Je vous serais très reconnaissant si vous aidiez à sa diffusion en l'envoyant par courriel à un ami ou en le partageant sur Twitter, Facebook ou Linked In.

Montrez-moi un peu d'amour avec les like ci-dessous ... Merci et n'oubliez pas, s'il vous plaît, de partager et de commenter ci-dessous!

This page has been seen 63093 times
  1. Ford ranger struts
  2. Cells at work keychain
  3. Superior fence products


Scatter plots

One key benefit of a Trellis system is its ability to generate bivariate scatter plots conditioned on one or more variables. For example, we may wish to compare incomes between female and male for each county and condition this relationship on educational attainment. This requires that male and female be assigned their own columns (since they are now treated as variables) and that educational attainment be assigned as another column whose values are each levels of educational attainment. We will therefore use .

The function is passed several parameters. The parameter instructs the function to generate both points, , and a background grid ,. Parameter can accept many other options, a few are listed in the following table:

Both points and lines
Both points and lines
Regression line
Reference grid
Cubic spline fit

The parameters and define the symbol shape and size. The parameter defines the point color. The parameter sets the aspect ratio in such a way that a unit of measure along x matches that of y, this facilitates income comparison between both sexes since the scales match exactly. The parameter generated a 45° line. If median incomes for male and female were identical in each county, the points would line up along the 45° line. Most points are above the line indicating that male income is greater than female income when aggregated at the county level.

Note that the point distribution seems skewed. We can warp the values in a function to help reveal the relationship between male and female income:

We can take this a step further. We could condition the relationship in income between male and female on both educational attainment and states or regions. We won’t condition the scatterplot on states as this would generate 50 x 6 separate plots, so we will condition the plots on region.

Note that since the output will consist of 6 (levels) x 4 (regions) we will need to modify the parameter to . We will also stick with the log transformation of income since it seems to do a good job in helping reveal the relationship between both income values.

Plotting with Lattice Graphics Demo

Lattice Graphs

The lattice package, written by Deepayan Sarkar, attempts to improve on base R graphics by providing better defaults and the ability to easily display multivariate relationships. In particular, the package supports the creation of trellis graphs - graphs that display a variable or the relationship between variables, conditioned on one or more other variables.

The typical format is

where graph_type is selected from the listed below. formula specifies the variable(s) to display and any conditioning variables . For example ~x|A means display numeric variable x for each level of factor A. y~x | A*B means display the relationship between numeric variables y and x separately for every combination of factor A and B levels. ~x means display numeric variable x alone.

graph_typedescriptionformula examples
barchartbar chart x~A or A~x
bwplotboxplotx~A or A~x
cloud3D scatterplot z~x*y|A
contourplot3D contour plot z~x*y
densityplotkernal density plot ~x|A*B
levelplot3D level plot z~y*x
parallelparallel coordinates plot data frame
splomscatterplot matrix data frame
stripplotstrip plots A~x or x~A
xyplotscatterplot y~x|A
wireframe3D wireframe graph z~y*x

Here are some examples. They use the car data (mileage, weight, number of gears, number of cylinders, etc.) from the mtcars data frame.

density1density 2density 3boxplot

scatterplot3D scatterplotdotplotscatterplot matrix

click to view

Note, as in graph 1, that you specifying a conditioning variable is optional. The difference between graphs 2 & 3 is the use of the layout option to contol the placement of panels.

Customizing Lattice Graphs

Unlike base R graphs, lattice graphs are not effected by many of the options set in the par( ) function. To view the options that can be changed, look at help(xyplot). It is frequently easiest to set these options within the high level plotting functions described above. Additionally, you can write functions that modify the rendering of panels. Here is an example.

custom trellis graph click to view

Going Further

Lattice graphics are a comprehensive graphical system in their own right. Deepanyan Sarkar's book Lattice: Multivariate Data Visualization with R is the definitive reference. Additionally, see the Trellis User's Guide. Dr. Ihaka has created a wonderful set of slides on the subject. An excellent early consideration of trellis graphs can be found in W.S. Cleveland's classic book Visualizing Data.

To Practice

Try this interactive course on data visualization which covers lattice graphs.



Plot in r lattice

I picked up my new friend in my arms and carried him to bed. He flushed and hid his face on my chest. Slava did not resist for long, I easily undressed him.

4 5 Plotting with Lattice Graphics using R

She gulped in air greedily. It was like a stone fell from my shoulders. I got back on time. He came very close, standing between them - Marina and Vakha. He looked at the girl.

Similar news:

She screamed and twitched a couple of times, but Python quite successfully penetrated with his household into the open back hole. - Me too, to visit you, baby, - the black man whispered hotly, thrusting Lynn's hands under the armpits and grabbing her tits. Her moan of pleasure answered him, long and loud.

318 319 320 321 322