This is a test version of Biostars. For the public version, visit https://www.biostars.org.
ggplot expression values as function of samples and classes

Hi Biostars,

Can anyone helps me on the following. I want to plot the expression values of miRNAs as function of samples using ggplot library. I've a dataframe "reduced_data" containing 50 samples and 3 miRNAs + one column "class" (class of each patient: 6 classes).

reduced_data (ordered by class):

              miRNA1     miRNA2     miRNA3      class
sample1   0.126766967  0.1396135 0.126766967      1
sample2   0.002176183  0.2699439 0.005832450      1
sample3   0.004802792  0.3232242 0.002334003      1
sample4   0.005626610  0.2865383 0.003429664      1
sample5   0.078054375  0.1274370 0.078054375      1
sample6   0.002946872  0.2648828 0.002946872      1
sample7   0.048704970  0.1786870 0.048704970      1
sample8   0.005917859  0.3780041 0.005917859      2
sample9   0.003999677  0.2946423 0.005693926      2
...

I want to use ggplot to plot the value of each miRNA as function of patients and classes, each miRNAx in one colour.

What I want to obtain (samples are stratified by classes):

enter image description here

What I've already tried:

mir1 <- data.frame(samples = rownames(reduced_data), class = reduced_data[,4], value = reduced_data[,1])
mir2 <- data.frame(samples = rownames(reduced_data), class = reduced_data[,4], value = reduced_data[,2])
mir3 <- data.frame(samples = rownames(reduced_data), class = reduced_data[,4], value = reduced_data[,3])
mirs <- list(miRNA1=mir1, miRNA2=mir2, miRNA3=mir3)
df_mirs <- cbind(cat=rep(names(mirs),sapply(mirs,nrow)),do.call(rbind,mirs))
ggplot(df_mirs, aes(samples, value, color=cat)) + geom_line()
# i got this error:
#geom_path: Each group consists of only one observation. Do you need to adjust the group aesthetic?

#By replacing samples by class in aes() function,
ggplot(df_mirs, aes(class, value, color=cat)) + geom_line()

I got the following:

enter image description here

Thanks in advance

ggplot mirna expression classes

1 answer

Then add a column sample to "reduced_data" then

library("reshape2")
m <- melt(reduced_data, id.vars=c("samples","class"), variable.name=("miRNA"))
ggplot(m, aes(x=samples,y=value,colour=miRNA))+ facet_grid(. ~ class)

In general in ggplot2 its always bringing the data into the correct form: a long table with one measured value per item http://vita.had.co.nz/papers/tidy-data.pdf

And make your questions more reproducible

Log in to answer this question.