Examples for GEPIA Usage


    With GEPIA, experimental biologists can easily explore the TCGA and GTEx datasets, find answers for their questions, and test their hypotheses.


    In differential analysis and expression profile, users can easily discover differentially expressed genes, such as MPO in leukemia and UPK2 in bladder cancer.

    MPO specifically expressed in leukemia:



    UPK2 specifically expressed in bladder cancer:



    The chromosomal distribution of over- or under- expressed genes can be plotted in Differential Genes.

    Over-expressed genes:


    Under-expressed genes:


    Both over-expressed and under-expressed genes:


    In Survival analysis, genes with the most significant association with patient survival can be identified, such as MCTS1 in breast cancer and HILPDA in liver cancer. Code

    #!/usr/bin/Rscript
    ### input the parameters and connect to mysql database;
    killDbConnections <- function () {
      all_cons <- dbListConnections(MySQL())
      for(con in all_cons){dbDisconnect(con)}
    }
    args<-commandArgs(T)
    signature = args[1]       ## signature genelist
    dataset = args[2]         ## selected datasets
    parameter = args[3]       ## parameters
    signatures = strsplit(signature,",")[[1]]       ## split the signature genelist into array
    datasets = strsplit(dataset,",")[[1]]           ## split the datasets info into array
    parameters = strsplit(parameter,",")[[1]]
    
    method = parameters[1]          ## OS or DFS
    symbol = parameters[2]
    symbol2 = parameters[3]
    ifreverse = parameters[4]
    ifmonth = parameters[5]
    highcutoff = parameters[6]
    lowcutoff = parameters[7]
    ifhr = parameters[8]
    ifconf = parameters[9]
    outputdir = parameters[10]       ## outputdir
    
    if(is.na(signatures[2])){signature = signatures[1]}else{
      signature = paste(signatures,collapse = "','")
      symbol = paste(symbol,symbol2,sep = "/")
      }
    
    dbs = "--------"            ## database
    .libPaths(c("--------",.libPaths()))      ## add the specific directory of RMySQL R package
    suppressPackageStartupMessages(library("RMySQL"))
    killDbConnections()
    mydb = dbConnect(MySQL(), user='root', password='--------$', dbname=dbs)     ## connet to mysql database
    
    df = as.matrix(array(data = 0,dim = c(0,length(signatures))))
    for(table_t in datasets){
      # table = table_t
      if(table_t == ""){next}
      table = paste(table_t,"_Tumor",sep = "")
      df_t=t(dbGetQuery(mydb,paste("SELECT * FROM ",table," WHERE geneid IN ('",signature,"')",sep="")))
      colnames(df_t) = df_t[1,]
      df_t = df_t[-1,,drop = F]
      df = rbind(df,df_t)
    }
    df = df[,signatures,drop=F]
    storage.mode(df) = "numeric"
    if(!is.na(signatures[2])){
      df = log2(df + 0.001)
      df = df[,1,drop = F] - df[,2,drop = F]
    }
    
    
    rownames(df) = sub(pattern="(.*_.*_.*)_.*$", replacement="\\1", rownames(df))
    rownames(df) = chartr("_","-",rownames(df))
    
    
    dataset_cut = gsub(pattern="(.*?)_.*$", replacement="\\1", datasets,perl = T)
    dbs = "--------"            ## database
    .libPaths(c("/data/tangzefang/lib/R",.libPaths()))      ## add the specific directory of RMySQL R package
    suppressPackageStartupMessages(library("RMySQL"))
    mydb = dbConnect(MySQL(), user='root', password='--------$', dbname=dbs)     ## connet to mysql database
    df_sur_t=(dbGetQuery(mydb,paste("SELECT * FROM survival WHERE CANCER IN ('",paste(dataset_cut,collapse = "','"),"')",sep="")))
    df_sur_t = df_sur_t[df_sur_t[,"OSDAY"] != 0,]
    
    df = df[rownames(df)[rownames(df) %in% df_sur_t[,1]],,drop = F]
    high_df = rownames(df[df[,1] > quantile(df[,1],as.numeric(highcutoff)/100),1,drop = F])
    low_df = rownames(df[df[,1] < quantile(df[,1],as.numeric(lowcutoff)/100),1,drop = F])
    high_num = length(high_df)
    low_num = length(low_df)
    
    if(method == "dfs"){
      df_sur = df_sur_t[df_sur_t[,1] %in% c(high_df,low_df),c(1:4)]
      df_sur = cbind(df_sur,0)
      df_sur[df_sur[,4] != "-",2] = 2   ## 2 means event while 1 means censor
      df_sur[df_sur[,4] != "-",3] = df_sur[df_sur[,4] != "-",4]
      df_sur[df_sur[,4] == "-",2] = 1 
      df_sur[df_sur[,2] == "Dead",2] = 2
      df_sur = df_sur[,c(1,2,3,5)]
      title = "Disease Free Survival"
    }else{
      df_sur = df_sur_t[df_sur_t[,1] %in% c(high_df,low_df),1:3]
      df_sur = cbind(df_sur,0)
      df_sur[df_sur[,2] != "Dead",2] = 1  ## 2 means event while 1 means censor
      df_sur[df_sur[,2] == "Dead",2] = 2
      title = "Overall Survival"
    }
    if(ifmonth == "month"){df_sur[,3] = as.numeric(df_sur[,3]) %/% 30 + 1}
      
      df_sur[df_sur[,1] %in% high_df,4] = "high"
      df_sur[df_sur[,1] %in% low_df,4] = "low"
      
      df_sur = as.data.frame(df_sur)
      df_sur[,3] = as.numeric(as.vector(df_sur[,3]))
      df_sur[,2] = as.numeric(as.vector(df_sur[,2]))
      colnames(df_sur)[4] = "CLASS"
      #### modified code
      df_sur$CLASS = factor(df_sur$CLASS,levels = c("low","high"))
      if(!ifreverse == "reverse"){color = c(4,2)}else{color = c(2,4)}
      suppressPackageStartupMessages(library(survival))
      
      mod = Surv(df_sur$OSDAY,df_sur$OSEVENT)
      mfit = survfit(mod~df_sur$CLASS)
      sur = survdiff(mod~df_sur$CLASS)
      p.val <- 1 - pchisq(sur$chisq, length(sur$n) - 1)
      p.val = signif(p.val,2)
      
      pdf(outputdir,width = 5,height = 5)
      
      par(mar = c(4,4,2,1))
      if(ifconf == "conf"){plot(mfit,col = color, lwd = c(2,1.3,1.3,2,1.3,1.3),mark.time=T,conf.int = T,lty = c(1,3,3,1,3,3))}else{plot(mfit,col = color, lwd = 2,mark.time=T)}
      results_coxph = summary(coxph(mod~df_sur$CLASS))$coefficients
      results_coxph_class = sub(pattern="df_sur\\$CLASS", replacement="", rownames(results_coxph))
      results_coxph_hr = signif(results_coxph[1,"exp(coef)"],2)
      results_coxph_hr_p = signif(results_coxph[1,"Pr(>|z|)"],2)
      
      title(main = title,cex.main = 1.5,font.main = 1,line = 0.4)
      if(ifmonth == "month"){xlab = "Months"}else{xlab = "Days"}
      title(xlab = xlab,ylab="Percent survival",cex.lab=1.3,line = 2.5)
      legend("topright",c(paste("Low",symbol,"TPM",sep=" "),
                          paste("High",symbol,"TPM",sep=" ")),
             col = color,lty = 1 ,lwd = 2,bty = "n",xjust = 1,
             y.intersp = 0.8,x.intersp = 0.5)
      if(ifhr == "hr"){text(x = max(df_sur$OSDAY) * 1.04,y = 0.73,
           labels = paste("Logrank p=",p.val,
                          "\n HR(",results_coxph_class,")=",results_coxph_hr,
                          "\n p(HR)=",results_coxph_hr_p,
                          "\n n(high)=",high_num,"\nn(low)=",low_num,
                          sep=""),pos = 2)
        }else{text(x = max(df_sur$OSDAY) * 1.04,y = 0.8,labels = paste("Logrank p=",p.val,"\n n(high)=",high_num,"\nn(low)=",low_num,sep=""),pos = 2)}
    garbage <- dev.off()  
    

    MCTS1 in breast cancer


    HILPDA in liver cancer:


    Gene expression is visualized by both a bodymap and a bar plot in General.



    Gene expression by pathological stage is plotted in Stage plot. Code

    #!/usr/bin/Rscript
    killDbConnections = function () {
      all_cons = dbListConnections(MySQL())
      for(con in all_cons){dbDisconnect(con)}
    }
    args=commandArgs(T)
    signature = args[1]       ## signature genelist
    dataset = args[2]         ## selected datasets
    parameter = args[3]       ## parameters
    parameters = strsplit(parameter,",")[[1]]
    datasets = strsplit(dataset,",")[[1]]   
    datasets = datasets[datasets != ""]
    ifmajor = parameters[1]           ## iflog ["yes" or "no"]
    iflog = parameters[2]   
    color = parameters[3]
    outputdir = parameters[4]       ## outputdir
    
    if(ifmajor == "yes"){table = "stage_major";seq = c("Stage 0","Stage I","Stage II","Stage III","Stage IV","Stage X");}else{
      table = "stage";seq = c("Stage 0","Stage I","Stage IA","Stage IA1","Stage IA2","Stage IB","Stage IB1","Stage IB2","Stage IC","Stage IS","Stage II","Stage IIA","Stage IIA1","Stage IIA2","Stage IIB","Stage IIC","Stage III","Stage IIIA","Stage IIIB","Stage IIIC","Stage IIIC1","Stage IIIC2","Stage IV","Stage IVA","Stage IVB","Stage IVC","Stage X");
    }
    
    dbs = "GE_SF"
    .libPaths(c("--------",.libPaths()))      ## add the specific directory of RMySQL R package
    suppressPackageStartupMessages(library("RMySQL"))
    suppressPackageStartupMessages(library("vioplot"))
    killDbConnections()
    #mydb = dbConnect(MySQL(), user='--------', password='--------', dbname=dbs)     ## connet to mysql database
    mydb = dbConnect(MySQL(), user='--------', password='--------', dbname=dbs,unix.socket="--------") 
    
    df = as.matrix(array(data = 0,dim = c(0,length(signature))))
    for(table_t in datasets){
      if(table_t == ""){next}
      table_t = paste(table_t,"_Tumor",sep = "")
      df_t=t(dbGetQuery(mydb,paste("SELECT * FROM ",table_t," WHERE geneid IN ('",signature,"')",sep="")))
      colnames(df_t) = df_t[1,]
      df_t = df_t[-1,,drop = F]
      df = rbind(df,df_t)
    }
    # df = df[,signatures]
    storage.mode(df) = "numeric"
    if(iflog == "yes"){df = log2(df + 1)}
    
    
    rownames(df) = sub(pattern="(.*_.*_.*)_.*$", replacement="\\1", rownames(df))
    rownames(df) = chartr("_","-",rownames(df))
    
    
    dataset_cut = gsub(pattern="(.*?)_.*$", replacement="\\1", datasets,perl = T)
    dbs = "GE_STAGE"            ## database
    .libPaths(c("--------",.libPaths()))      ## add the specific directory of RMySQL R package
    suppressPackageStartupMessages(library("RMySQL"))
    #mydb = dbConnect(MySQL(), user='--------', password='--------', dbname=dbs)     ## connet to mysql database
    mydb = dbConnect(MySQL(), user='--------', password='--------', dbname=dbs,unix.socket="--------") 
    df_stage=(dbGetQuery(mydb,paste("SELECT * FROM ",table," WHERE CANCER IN ('",paste(dataset_cut,collapse = "','"),"')",sep="")))
    
    colnames(df_stage)[3] = "value"
    rownames(df_stage) = df_stage[,1]
    df_stage = df_stage[,-1]
    df_stage = df_stage[rownames(df_stage)[rownames(df_stage) %in% rownames(df)],,drop = F]
    df_stage[,2] = df[rownames(df_stage),1]
    list_stage = table(df_stage[,1])
    if(length(list_stage[list_stage == 1]) > 0){df_stage = df_stage[df_stage[,1] != names(list_stage[list_stage == 1]),]}
    
    
    
    
    seq_certain = seq[seq %in% df_stage[,1]]
    
    n = length(unique(df_stage[,1]))
    dist = max(range(df_stage[,2]))/10
    ylim = range(df_stage[,2])
    ylim[2] = ylim[2]+dist
    
    pdf(outputdir,title="Result Display",width = 2 + n,height = 5)
    par(mar=c(3.6, 3.1, 1.6, 2.1))
    boxplot(0,0 , xlim=c(0.5,n + 0.5), ylim=ylim, xaxt="n", col="yellow")
    
    for(i in 1:n){
      vioplot(x = df_stage[df_stage[,1] == seq_certain[i],2],at = i,add = T,col = color)
    }
    if(iflog == "yes"){aov_model = aov(value ~ STAGE,data = df_stage)}else{
      df_stage_log = df_stage
      df_stage_log[,2] = log2(df_stage_log[,2] + 1)
      aov_model = aov(value ~ STAGE,data = df_stage_log)
    }
    stat_result = summary(aov_model)[[1]][1,][4:5]
    text(x = n + 0.5 ,y=max(df_stage[,2])*1.05,labels = paste("F value = ",signif(stat_result[1,1],3),"\nPr(>F) = ",
                                                                signif(stat_result[1,2],3),sep=""),cex = 1.1,col = "black",pos = 2)
    axis(1, at = 1:n, labels = seq_certain, tick = TRUE)
    blackhole = dev.off()
    

    Users can compare the expression of one gene in multiple cancers by Boxplot, or compare multiple genes by a matrix plot in Multiple gene comparison. Code

    #!/usr/bin/Rscript
    args=commandArgs(T)
    signature = args[1]       ## signature genelist
    dataset = args[2]         ## selected datasets
    parameter = args[3]       ## parameters
    datasets = strsplit(dataset,",")[[1]]           ## split the datasets info into array
    datasets = datasets[datasets != ""]
    parameters = strsplit(parameter,",")[[1]]
    dbs = "GE_SF"             ## database
    iflog = parameters[1]           ## iflog ["yes" or "no"]
    suffix = parameters[2]          ## "NG" or "Normal"
    color1 = parameters[3]
    color2 = parameters[4]
    fccutoff = as.numeric(parameters[5])
    qcutoff = as.numeric(parameters[6])
    jittersize = as.numeric(parameters[7])
    outputdir = parameters[8]       ## outputdir
    
    .libPaths(c("--------",.libPaths()))      ## add the specific directory of RMySQL R package
    suppressPackageStartupMessages(library("RMySQL"))
    #mydb = dbConnect(MySQL(), user='--------', password='--------', dbname=dbs)     ## connet to mysql database
    mydb = dbConnect(MySQL(), user='--------', password='--------', dbname=dbs,unix.socket="--------") 
    
    ### build the integrated table
    ### single gene
    df = as.matrix(array(data = 0,dim = c(0,2)))
    for(j in c("Tumor",suffix)){
      for(i in 1:length(datasets)){
        if(datasets[i] == ""){next;}
        table = paste(datasets[i],j,sep="_")
        df_t=t(dbGetQuery(mydb,paste("SELECT * FROM ",table," WHERE geneid IN ('",signature,"')",sep="")))
        colnames(df_t) = df_t[1,]
        df_t = df_t[-1,,drop = F]
        df_t = cbind(df_t,table)
        df = rbind(df,df_t)
      }
    }
    colnames(df)[2] = "class"
    df = as.data.frame(df)
    df[,1] = as.numeric(as.vector(df[,1]))
    if(iflog == "yes"){
      df[,1]=log2(df[,1]+1)
    }
    n = length(datasets)
    
    ## hypothesis test
    
    stat_df = as.matrix(array(data = 0,dim = c(2,n)))
    colnames(stat_df) = datasets
    rownames(stat_df) = c("LogFC","pvalue")
    mark = rep(NA,n)
    
    for(i in 1:length(datasets)){
      if(iflog != "yes"){df_t = df;df_t[,1] = log2(df_t[,1]+1);}else{df_t = df;}
      colnames(df_t) = c("value","class")
      df_t_tumor = df_t[df_t[,2] == paste(datasets[i],"_Tumor",sep=""),]
      df_t_normal = df_t[df_t[,2] == paste(datasets[i],"_",suffix,sep=""),]
      stat_df["LogFC",i] = as.numeric(median(df_t_tumor[,1]) - median(df_t_normal[,1]))
      df_t_both = rbind(df_t_tumor,df_t_normal)
      aov_model = aov(value ~ class,data = df_t_both)
      stat_df["pvalue",i]=as.numeric(summary(aov_model)[[1]][1,][5])
      if(abs(stat_df["LogFC",i]) > fccutoff & stat_df["pvalue",i] > qcutoff){mark[i]= "*";}else{mark[i] = NA;}
    }
    
    ### boxplot function
    
    pdf(outputdir,title="Result Display",width = 1+3*n,height = 6)
    par(mar=c(3.6, 3.1, 1.6, 2.1))
    dist = max(range(df[,1]))/20
    ylim = range(df[,1])
    ylim[2] = ylim[2]+dist
    boxplot(0,0,xlim=c(0,n*3), ylim=ylim, xaxt="n", col="red",cex = 0.5,outline=F)
    
    for(i in 1:length(datasets)){
      seq_t = c(paste(datasets[i],"_Tumor",sep=""),paste(datasets[i],"_",suffix,sep=""))
      df_t = df[df[,2] %in% seq_t,]
      df_t[,2] = factor(as.vector(df_t[,2]),levels = seq_t)
      colnames(df_t) = c("value","class")
      boxplot(value~class,data = df_t, at=c((i-1)*3+1,(i-1)*3+2), xaxt="n", add=TRUE, col=c(color1,color2),cex = 0.5,outline=F)
      stripchart(value~class, vertical = TRUE, data = df_t,at=c((i-1)*3+1,(i-1)*3+2), 
                 method = "jitter", add = TRUE, pch = 20, col = 'black',cex = jittersize)
    
    }
    
    xpos = 0:(n-1)*3+1.5
    ypos.a = c()
    for(i in paste(datasets,"Tumor",sep="_")){
      ypos.a = c(ypos.a,max(df[df[,2] == i,1]))
    }
    ypos.b = c()
    for(i in paste(datasets,suffix,sep="_")){
      ypos.b = c(ypos.b,max(df[df[,2] == i,1]))
    }
    
    for(i in 1:length(mark)){
      if(!is.na(mark[i])){
        segments(xpos[i]-.5, ypos.a[i]+dist/2, xpos[i]-.5, max(ypos.a[i], ypos.b[i])+dist)
        segments(xpos[i]+.5, ypos.b[i]+dist/2, xpos[i]+.5, max(ypos.a[i], ypos.b[i])+dist)
        segments(xpos[i]-.5, max(ypos.a[i], ypos.b[i])+dist, xpos[i]-0.1, max(ypos.a[i], ypos.b[i])+dist)
        segments(xpos[i]+.5, max(ypos.a[i], ypos.b[i])+dist, xpos[i]+0.1, max(ypos.a[i], ypos.b[i])+dist)
        text(x=xpos[i], y=max(ypos.a[i], ypos.b[i])+dist, label=mark[i], col="red",cex = 2)
      }
    }
    label=c()
    for(i in 1:length(datasets)){
      label_t_num = sum(df[,2] == paste(datasets[i],"Tumor",sep="_"))
      label_n_num = sum(df[,2] == paste(datasets[i],suffix,sep="_"))
      label_t = paste(datasets[i]," \n(num(T)=",label_t_num,"; num(N)=",
            label_n_num,")",sep="")
      label = c(label,label_t)
    }
    axis(1, at = 0:(n-1)*3+1.5,mgp=c(2,2,0), labels = label, tick = TRUE)
    
    a = dev.off()
    

    Boxplot:


    Matrix plot:


    GEPIA provides pair-wise gene correlation analysis of a given set of TCGA and/or GTEx expression data. Normalization is optional and customizable. Code

    #!/usr/bin/Rscript
    killDbConnections = function () {
      all_cons = dbListConnections(MySQL())
      for(con in all_cons){dbDisconnect(con)}
    }
    args=commandArgs(T)
    signature = args[1]       ## signature genelist
    dataset = args[2]         ## selected datasets
    parameter = args[3]       ## parameters
    signatures = strsplit(signature,",")[[1]]       ## split the signature genelist into array
    if(is.na(signatures[4])){signatures[4] = ""}
    datasets = strsplit(dataset,",")[[1]]           ## split the datasets info into array
    datasets = datasets[datasets != ""]
    parameters = strsplit(parameter,",")[[1]]
    dbs = "GE_SF"             ## database
    symbol1 = parameters[1]
    symbol2 = parameters[2]
    symbol3 = parameters[3]
    symbol4 = parameters[4]
    method = parameters[5]          ## "pearson" or "spearman" or "kendall"
    outputdir = parameters[6]       ## outputdir
    
    
    .libPaths(c("--------",.libPaths()))      ## add the specific directory of RMySQL R package
    suppressPackageStartupMessages(library("RMySQL"))
    killDbConnections()
    #mydb = dbConnect(MySQL(), user='--------', password='--------', dbname=dbs)     ## connet to mysql database
    mydb = dbConnect(MySQL(), user='--------', password='--------', dbname=dbs,unix.socket="--------") 
    
    ## Gene A:
    if(signatures[3] != ""){
      symbol1 = paste(symbol1,symbol3,sep = "/")
      signatures_a = c(signatures[1],signatures[3])
    }else{signatures_a = signatures[1]}
    df_a = as.matrix(array(data = 0,dim = c(0,length(signatures_a))))
    for(i in 1:length(datasets)){
      table = datasets[i]
      df_t=t(dbGetQuery(mydb,paste("SELECT * FROM ",table," WHERE geneid IN ('",paste(signatures_a, collapse = "','"),"')",sep="")))
      colnames(df_t) = df_t[1,]
      df_t = df_t[-1,,drop = F]
      df_a = rbind(df_a,df_t)
    }
    storage.mode(df_a) = "numeric"
    df_a = df_a[,signatures_a,drop = F]
    if(signatures[3] != ""){
      df_a = log2(df_a + 0.001)
      df_a = df_a[,1,drop = F] - df_a[,2,drop = F]
      df_a = 2^df_a
      colnames(df_a) = signatures_a[1]
    }
    ## Gene B:
    if(signatures[4] != ""){
      symbol2 = paste(symbol2,symbol4,sep = "/")
      signatures_b = c(signatures[2],signatures[4])
    }else{signatures_b = signatures[2]}
    df_b = as.matrix(array(data = 0,dim = c(0,length(signatures_b))))
    for(i in 1:length(datasets)){
      table = datasets[i]
      df_t=t(dbGetQuery(mydb,paste("SELECT * FROM ",table," WHERE geneid IN ('",paste(signatures_b, collapse = "','"),"')",sep="")))
      colnames(df_t) = df_t[1,]
      df_t = df_t[-1,,drop = F]
      df_b = rbind(df_b,df_t)
    }
    storage.mode(df_b) = "numeric"
    df_b = df_b[,signatures_b,drop = F]
    if(signatures[4] != "" ){
      df_b = log2(df_b + 0.001)
      df_b = df_b[,1,drop = F] - df_b[,2,drop = F]
      df_b = 2^df_b
      colnames(df_b) = signatures_b[1]
    }
    
    df = cbind(df_a,df_b)
    
    
    
    ### build the integrated table
    ### single gene
    colnames(df)[colnames(df) == signatures[1]] = symbol1
    colnames(df)[colnames(df) == signatures[2]] = symbol2
    
    pdf(file = outputdir,title="Result Display",width = 6,height = 5.5)
    par(mar=c(4.5, 5.1, 1.1, 2.1))
    options(warn=-1)
    rvalue = signif(cor(x = df[,1], y = df[,2],method = method),2)
    cpvalue = signif(as.numeric(cor.test(x = df[,1], y = df[,2],method = method)[3]),2)
    plot(x = log2(df[,1] + 1),y = log2(df[,2] + 1),main = NULL,cex.lab = 1.5,
         xlab = paste("log2(",colnames(df)[1]," TPM)",sep = ""),
         ylab = paste("log2(",colnames(df)[2]," TPM)",sep = ""), pch = 19,cex=0.5)
    range_y = range(log2(df[,2] + 1))
    text(x = max(log2(df[,1] + 1)) * 1.03,y = max(log2(df[,2] + 1)) - (range_y[2] - range_y[1])/15,labels = paste("p-value = ",as.character(cpvalue),"\nR = ",as.character(rvalue),sep=""),cex = 1.3,col = "black",pos = 2)
    a = dev.off()
    

    GEPIA provides Principal Component Analysis of multiple genes and cancer types in PCA, and presents results by 2D or 3D plots.

    2D plots:


    3D plots:


    Variances distribution:


    Genes with similar expression pattern can be identified in Similar Genes, for example, PGAP3 and GRB7 are similar to ERBB2.


    ERBB2:


    PGAP3:


    GRB7:


    Hope you enjoy GEPIA!