Data Visualization In R
2
1
Entering edit mode
8.3 years ago
deschisandy ▴ 60

The data to be visualized is from an experiment (T1-T8 represents different sections of the brain) and is as follows:

    [[Block1]]
              sum
       [T1,]   6
       [T2,]   6
       [T3,]   4
       [T4,]   5
       [T5,]   8
       [T6,]   9
       [T7,]   8
       [T8,]   6

    [[Block2]]
              sum
       [T1,]   3
       [T2,]   3
       [T3,]   4
       [T4,]   5
       [T5,]   4
       [T6,]   2
       [T7,]   1
       [T8,]   5

    [[Block3]]
              sum
       [T1,]   3
       [T2,]   3
       [T3,]   4
       [T4,]   2
       [T5,]   4
       [T6,]   8
       [T7,]   3
       [T8,]   1   

   [[Block4]]
              sum
       [T1,]   6
       [T2,]   5
       [T3,]   4
       [T4,]   3
       [T5,]   9
       [T6,]   8
       [T7,]   2
       [T8,]   6  

   [[Block5]]
              sum
       [T1,]   8
       [T2,]   3
       [T3,]   4
       [T4,]   5
       [T5,]   7
       [T6,]   6
       [T7,]   2
       [T8,]   2 

   [[Block6]]
              sum
       [T1,]   10
       [T2,]   9
       [T3,]   6
       [T4,]   8
       [T5,]   9
       [T6,]   4
       [T7,]   6
       [T8,]   7

and so on.. For more than 100 blocks..

I would like to visualize the data in the following way to see the overall value in each region for very block..

For one block I get a line plot as shown below:

Block 1

But it is tedious to visualize the same for 100 blocks.. What would be the best method to view it as a single plot using R..I tried doing it with heat maps but I would rather visualize them as a graph..

In the end it should be something like ( I have a rough figure of it).. Iam not sure how to do this in R for several blocks in a single plot or some other better way to visualize it: enter image description here

r • 3.1k views
ADD COMMENT
1
Entering edit mode

Edit your question to a better title plus check facet_grid of ggplot!!

ADD REPLY
1
Entering edit mode

Cross-posted on stackoverflow, where several good answers have been offered. http://stackoverflow.com/questions/17280468/data-visualization-in-r

ADD REPLY
4
Entering edit mode
8.3 years ago

This is a difficult question, because the answer depends on what you want to show.

The ENCODE researchers faced similar problems, when they had to find a way to visualize expression levels from a lot of tissues. One solution they have found is the ENCODE-RNA-dashboard:

ENCODE RNA Dashboard

This basically is not much different from an heatmap, but it is interactive, so you can click and get more details about a specific tissue.

Another solution, as suggested bu Suhkdeep, is to use faceting. This is a reproducible example of how to use faceting to generate multiple plots:

> library(reshape)
> d = data.frame("B1"=rnorm(8),"B2"=rnorm(8), "B3"=rnorm(8), "B4"=rnorm(8), "B5"=rnorm(8), "B6"=rnorm(8), "B7"=rnorm(8), "B8"=rnorm(8))
> d

          B1           B2          B3         B4          B5         B6
1 -0.6581045 -1.093919442  0.94578457 -0.1805976  0.41888201 -0.7794898
2 -1.1092189 -0.091769948  0.09502878 -1.4822778 -0.04307963 -0.5021063
3  0.8569934 -0.388095230 -1.06364075  0.2441476 -0.23060652 -1.4263023
4 -0.9435040 -0.791272225 -1.20657936  0.6161711  1.18477321 -0.3969317
5  0.1589559 -0.007835382  0.66982203  0.3872096 -0.88920083 -0.2209863
6  1.4952576  0.549350763 -0.61693139 -1.5470285  0.21826829 -0.7205813
7 -1.5454067 -0.785411708  0.48277576 -1.8998326  0.78415025 -0.8832751
8  1.0721951  0.490277322  1.17584947  0.1968467  1.74636297  1.8247020
          B7         B8
1 -1.7490352 -0.3638126
2  1.1485487  0.7564457
3  0.9900087 -1.1589263
4 -1.2926119  1.4203860
5  3.4772243  0.8022015
6  0.5892454  0.3348479
7 -0.4157224  0.6205421
8 -0.6170603  1.5733568

> d$id = row.names(d)
> d.long = melt.data.frame(d, id.var='id')

# facets with ggplot2

> library(ggplot2)
> qplot(as.integer(id), value, facets=~variable, data=d.long, geom='line')

enter image description here

# facets with lattice

> library(lattice)
> xyplot(value~id2|variable, d.long, type=c('l','p'), layout=c(3,3)) # note: with the layout option you can split the plot into multiple page. This is actually not easy to do in ggplot2.

enter image description here

ADD COMMENT
4
Entering edit mode
8.3 years ago
Pavel Senin ★ 1.9k

This sort of very simple, yet efficient way to obtain plot similar to yours at once, you will need to add proper breaks and axis labels

require(ggplot2)
require(reshape)

# make data matrix 10x100, step 5 for each next series
data = data.frame(  
  matrix(rnorm(1000)+rep(seq(1,50,5),100), nrow=10, byrow=F))

# numeric variables
colnames(data) = paste(seq(1:100))

# attach series names and do the melt
data = cbind(series=factor(seq(1:10), levels=seq(1:10), 
              labels=paste("series_",seq(1:10),sep="")), data)
dm = melt(data)

# plot
(p = ggplot(dm, aes(x=variable, y=value, group=series, colour=series)) +
   geom_line() + theme_bw() + ggtitle("A rough figure of it...") +
   scale_y_continuous("Blocks",breaks=seq(1,50,5), labels=paste("block_",seq(1:10),sep="")) +
   scale_x_discrete("T-s",breaks=seq(1,100,10), labels=paste("T",seq(1:10),sep="")))

enter image description here

ADD COMMENT
0
Entering edit mode

nice idea, you should add a screenshot of the plot to this discussion.

ADD REPLY
0
Entering edit mode

Alright. Sample added.

ADD REPLY

Login before adding your answer.

Traffic: 1228 users visited in the last hour
Help About
FAQ
Access RSS
API
Stats

Use of this site constitutes acceptance of our User Agreement and Privacy Policy.

Powered by the version 2.3.6