Замените метки данных в тепловой карте ggplot2 фактическими именами столбцов в блестящем приложении - PullRequest
0 голосов
/ 21 мая 2018

Здравствуйте, у меня есть простое блестящее приложение, которое создает тепловую карту.Проблема в том, что после того, как я сливаю исходный набор данных в «gen3», я получаю имена меток, такие как gen3[,1]: DADA, но вместо этого я хочу взять gene_symbol: DATA (я хочу то же самое с другими метками).Это возможно с ggplot2?Я предполагаю, что должен использовать paste() как-то или вручную изменить метки.

#data
gene_symbol<-c("DADA","SDAASD","SADDSD","SDADD")
ASDDA<-c("normal","over","low","over")
ASDDb<-c("normal","over","low","over")
ASDDAf<-c("normal","over","low","over")
Gene_states2<-data.frame(gene_symbol,ASDDA,ASDDb,ASDDAf)

#ui.r
library(shiny)
library(ggplot2)
library(plotly)
library(extrafont)
library(dplyr)

fluidPage(

  # App title ----
  titlePanel(div("GENES HEATMAP",style = "color:blue")),

  # Sidebar layout with input and output definitions ----
  sidebarLayout(

    # Sidebar panel for inputs ----
    sidebarPanel(width = 3

    ),
    # Main panel for displaying outputs ----
    mainPanel(

      tabsetPanel(type = "tabs",
                  tabPanel("Heatmap",

                           fluidRow(
                             tags$style(type="text/css",
                                        ".shiny-output-error { visibility: hidden; }",
                                        ".shiny-output-error:before { visibility: hidden; }"

                             ),
                             plotlyOutput("sc")
                           )


                  ))
      )))
#server.r
function(input, output,session) {

rt <-reactive ({req (input $ file1) </p>

csvdata <- read.csv(input$file1$datapath,
                    header = input$header

)

if(input$disp == "head"){
  head(csvdata)
} else{
  csvdata
} 

row.has.na <- apply(csvdata, 1, function(x){any(is.na(x))})
csvdata2 <- csvdata[!row.has.na,]

csvdata2

})

  output$sc<-renderPlotly({
    library(ggplot2); library(reshape2)
    gen3 <- melt(rt(), id.var = colnames(rt())[1])
    p1<-ggplot(gen3, aes(gen3[,1],gen3[,2])) + geom_tile(aes(fill = gen3[,3]),
                                                         colour = "white") + scale_fill_manual(values=c("yellow", "red", "blue"))+
      labs(x = "gene_symbol",y="sample",fill="value")+
      theme(title = element_text(family = "Calibri", 
                                 size = 10, 
                                 face = "bold"), 
            axis.title = element_text(family = "Calibri Light", 
                                      size = 16, 
                                      face = "bold", 
                                      color = "black"), 
            axis.text = element_text(family = "Calibri", 
                                     size = 11),
            axis.title.y = element_text(margin = margin(t = 0, r = 25, b = 0, l = 25)),
            panel.background = element_rect(fill = NA),
            panel.grid.major = element_line(colour = "grey50"))
    ggplotly(p1)%>%
      layout( autosize = F, width = 1450, height = 600,hoverlabel = list(bgcolor = "white",
                                                                         font = list(family = "Calibri", 
                                                                                     size = 9, 
                                                                                     color = "black")))

  })  

}

1 Ответ

0 голосов
/ 21 мая 2018

В ggplot нет необходимости указывать имя data.frame в эстетике (aes) после того, как вы уже сказали ему, какой data.frame использовать.

Просто сделайте это: ggplot(gen3, aes(gene_symbol, variable)) + geom_tile(aes(fill= value) ... и так далее.

Если вы не хотите, чтобы variable и value отображались в вашем ярлыке, просто измените названия gen3 после того, как вы растопите его на то, что хотите отображать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...