Ecg
Ecg

Reputation: 942

Add variable function label to ternary plot in R

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

Upvotes: 1

Views: 363

Answers (1)

StupidWolf
StupidWolf

Reputation: 46958

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)

Upvotes: 1

Related Questions