Question: How to highlight certain genes in a Volcano Plot in R
0
ishackm100 wrote:

Hi all,

I would like to know please how to highlight certain genes in a list with a specific colour in a Volcano Plot in R

I have the following code:

``````genes22= read.csv("../Python/matrix_gene_final v2.csv")
gene_list <- as.vector(genes22)

#All Genes
# MOCS vs MOSE
res = MOCSvsMOSE

# Make a basic volcano plot
with(res, plot(logFC, -log10(P.Value),pch=20, main="MOCS vs MOS", xlim=c(-8.8,8)))

# if adj.P value less than 0.05 = green
with(subset(res, adj.P.Val<.05 ), points(logFC, -log10(P.Value), pch=20, col="green"))

# if logFC value more than 1 = blue
with(subset(res, abs(logFC)>1), points(logFC, -log10(P.Value), pch=20, col="blue"))

# show the genes in the gene list as pink in the volcano plot
with(res [rownames(res) %in% gene_list]), points(logFC, -log10(P.Value), pch=20, col="pink"))
``````

Everything works except the final line of code:

`````` # show the genes in the gene list as pink in the volcano plot
with(res [rownames(res) %in% gene_list]), points(logFC, -log10(P.Value), pch=20, col="pink"))
``````

I get the following error:

``````Error: unexpected ',' in "with(res [rownames(res) %in% gene_list]),"
``````

The volcano plot only shows the blue and green colours.

How can I fix this please?

Many Thanks,

Ishack

deg volcano plot R • 2.8k views
modified 21 months ago by krushnach80870 • written 21 months ago by ishackm100

This is purely a programming question. Hint: `df [1:10,1:10]` is not the same as `df[1:10,1:10]`.

Sorry i dont understand. Can you clarify please?

I wrote two lines/statements of code as a hint so you could find the difference between the two statements and apply your learning to your code.

Thanks but i still get the same error.

Is there another way?

Yes, check if your parentheses are matched. Again, this is a simple syntax error that has nothing to do with bioinformatics.

as Ram has been pointing out: the problem is in your last line, specifically the way you subset the data.frame -- why don't you use the same `subset` routine as for the other lines?

Hi I have added this code and there is no error but I still don't get the orange colour

``````gene_list <- scan("../Python/matrix_gene_final.csv", what="", sep="\n")
gene_list <- as.vector(gene_list)

with(subset(res, rownames(res) %in% gene_list), points(logFC, -log10(P.Value), pch=20, col="orange"))
``````

How can I fix this, please?

Many Thanks,

Ishack

1

well, what do you get? Without an error or a plot it's difficult to diagnose

I recommend you to use an online volcano-plot generator like this.

2
Prakash2.1k wrote:

I wrote this code for similar purpose, see if it helps for better visualization.

``````library(ggplot2)
library(ggrepel)
library(dplyr)
gene_list <- as.vector(genes22)

data= subset(res, rownames(res) %in% gene_list)
data= data[which(abs(data\$logFC) >=1),]
data= data[which(abs(data\$P.Value) <=0.05),]
res <- res %>%
mutate(reg = case_when(
res\$logFC >= 1 & res\$P.Value <= 0.05 ~ "UP",
res\$logFC <= -1 & res\$P.Value <= 0.05 ~ "DOWN",
abs(res\$logFC) <= 1 & res\$P.Value >= 0.05 ~ "no_change",
abs(res\$logFC) <= 1 & res\$P.Value <= 0.05 ~ "no_change",
abs(res\$logFC) > 1 & res\$P.Value >0.05 ~ "no_change"
)) %>%
mutate(reg = factor(reg, levels = c("UP", "no_change","DOWN")))

plt <-  ggplot(res,aes(x=logFC,y=-log10(P.Value),label = rownames(res))+
geom_point(aes(color=reg))+
scale_color_manual(name = "Differential \n regulation",
values = c("DOWN" = "#058983",
"no_change" = "grey",
"UP" = "#DEB132"),
labels = c("UP", "No Change", "DOWN"))+
theme(axis.text.x=element_text(size=16,color="black")
, axis.title.x=element_text(size=16)
, axis.text.y=element_text(size=16,color="black")
, axis.title.y=element_text(size=16)
, legend.justification=c(0,1)
, legend.box.background = element_rect(colour = "black")
, plot.title = element_text(hjust = 0.5))+
geom_text_repel(
data          = data,
size          = 5,
nudge_y      = 30,
direction    = "x",
angle        = 0,
vjust        = 0,
segment.size  = 0.5,
segment.color = "black"
direction     = "x"
)
``````
2
krushnach80870 wrote:
``````library(EnhancedVolcano)

EnhancedVolcano(res1,lab = rownames(res1),x = "log2FoldChange",y = "padj",
#selectLab = c("RPL11","RPL10","RPL18A","RPL28"), [just add your list of genes you want to highlight]
xlim = c(-6, 6),
xlab = bquote(~Log~ "fold change"),
transcriptPointSize = 10,
transcriptLabSize = 10,
border = "full",
#legendPosition = "bottom",
borderWidth = 1.5,
legendPosition = 'bottom',
legendLabSize = 20,
legendIconSize = 20,
borderColour = "blue",
drawConnectors = FALSE,
#widthConnectors = 0.01,
colConnectors = 'grey30',
gridlines.major = FALSE,
gridlines.minor = FALSE)
``````
1

Thank you all, it finally works.