1
votes

I would like to plot my data as a ternary plot, where genes go up or down under one of the three conditions, ie. closer to the condition for which shows higher values.

  1. Are values normalised for each variable independently of the values?
  2. Can I add a label to a selected "gene" variable which states variable "func2"?

here is a reproducible example of what I obtain (top) and what I want (bottom)

gene <- c("Gene1", "Gene2", "Gene3", "Gene4","Gene5", "Gene6")
func1 <- c("A", "B", "C", "D", "C", "A")
func2 <- c("A1", "B1", "C1", "D1", "C2", "A2")
Cond1 <- c(0.007623561, 0.004639893, 0.000994121, 0.017494429, 0.000366445, 0.006663334)
Cond2 <- c(0.011299941, 0.009994388, 0.001012428, 0.013695669, 0.000299771, 0.010287904)
Cond3 <- c(0.005055458, 0.016826251, 0.001311254, 0.016115009, 0.000242897, 0.004583889)
df <- data.frame(gene, func1, func2, Cond1, Cond2, Cond3)


library(ggplot2) 
library(ggtern) 
ggtern(data=df,aes(x=Cond1,y=Cond2,z=Cond3,color=func1)) +
theme_bw() +
geom_point() +
labs(x="Cond1",y="Cond2",z="Cond3") +
scale_T_continuous(breaks=unique(df$x))+ 
scale_L_continuous(breaks=unique(df$y))+ 
scale_R_continuous(breaks=unique(df$z))

enter image description here enter image description here

1

1 Answers

1
votes

We store the original plot first:

library(ggtern)

g = ggtern(data=df,aes(x=Cond1,y=Cond2,z=Cond3,color=func1)) +
theme_bw() +
geom_point() +
labs(x="Cond1",y="Cond2",z="Cond3") +
scale_T_continuous(breaks=unique(df$x))+ 
scale_L_continuous(breaks=unique(df$y))+ 
scale_R_continuous(breaks=unique(df$z))

A simple annotated plot will look like this, using the geom_label_viewport() option:

g + geom_text(aes(label=func2),hjust=-0.2,vjust=-0.2,size=3)

enter image description here

You can subset the points to label like this:

g + geom_text(data=~subset(.,func2 %in% c("C2","B1")),
aes(label=func2),hjust=-0.2,vjust=-0.2,size=3)