R 同时更新中的绘图和多个表
在我闪亮的应用程序中,我有一个ggplot火山图,它是可点击的,此外,我有一个表(表1)中的图中找到的所有数据,以及一个表(表2),用于点图中点击的数据点以及第一个表(表1)中点击的数据。 我想要的是在单击一个对象时更新其余两个对象。因此,如果单击绘图,数据点应在表2中弹出,我想将此信息添加到表1中(使行处于选中状态)。类似地,如果在表1中单击一行,我希望将其添加到表2和绘图中。如果在绘图或其他任何地方取消选择了一个点,则应从其余两个点中删除该点。 简而言之,如果从这三个对象中的任何一个选择或删除数据,我希望其他两个对象也会发生同样的情况。 希望这有意义,以下是我目前使用的代码:R 同时更新中的绘图和多个表,r,shiny,R,Shiny,在我闪亮的应用程序中,我有一个ggplot火山图,它是可点击的,此外,我有一个表(表1)中的图中找到的所有数据,以及一个表(表2),用于点图中点击的数据点以及第一个表(表1)中点击的数据。 我想要的是在单击一个对象时更新其余两个对象。因此,如果单击绘图,数据点应在表2中弹出,我想将此信息添加到表1中(使行处于选中状态)。类似地,如果在表1中单击一行,我希望将其添加到表2和绘图中。如果在绘图或其他任何地方取消选择了一个点,则应从其余两个点中删除该点。 简而言之,如果从这三个对象中的任何一个选择或删
ui <- fluidPage(
fluidRow(
column(
width = 6,
selectInput('inputFile',
label='select a file:',
choice=c('C34_vs_wt','C32_vs_wt',
'C55_vs_wt','C49_vs_wt',
'C7_vs_wt','C9_vs_wt')),
plotOutput("volcanoPlot",
click = "volcanoPlotSelection",
height = "700px")
),
column(
width = 6,
dataTableOutput("selectedProbesTable"),
hr(),
dataTableOutput("mytable")
)
)
)
selected_points<-deseqres_DE[[1]][0,]
server <- function(input, output) {
mc <- reactive({
deseqres_DE[[which(names(deseqres_DE)==input$inputFile)]][,c(8,3,7,9)]
})
output$mytable <- renderDataTable({ #table with all data found in the plot
datatable(mc()[,1:3], filter = 'top')
})
selected <- reactive({
# add clicked
selected_points <<- rbind(selected_points,
nearPoints(mc(),
input$volcanoPlotSelection,
maxpoints = 1),
mc()[input$mytable_rows_selected,])
# remove _all_ duplicates if any (toggle mode)
selected_points <<-
selected_points[!(duplicated(selected_points) |
duplicated(selected_points, fromLast = TRUE)), ]
str(selected_points)
return(selected_points)
})
output$volcanoPlot <- renderPlot({ #plot
DE <- factor(ifelse(mc()$minusLog10Pvalue > 2 & (mc()$log2FoldChange > 2 | mc()$log2FoldChange < (-2)),
"DEG", "non_DEG"))
levels(DE) <- c(levels(DE), "clicked")
DE[mc()$external_gene_name %in% selected()$external_gene_name] <- "clicked"
ggplot() +
geom_point(
data=mc()[which(DE=="non_DEG"),],
aes(x=log2FoldChange, y=minusLog10Pvalue),
colour="#00BFC4") +
geom_point(
data=mc()[which(DE=="DEG"),],
aes(x=log2FoldChange, y=minusLog10Pvalue),
colour="#F8766D") +
geom_point(
data=mc()[which(DE=="clicked"),],
aes(x=log2FoldChange,
y=-log10(padj)),
colour="black") +
geom_text(aes(x=mc()[which(DE=="clicked"),]$log2FoldChange,
y=mc()[which(DE=="clicked"),]$minusLog10Pvalue,
label = mc()[which(DE=="clicked"),]$external_gene_name),
nudge_y = 5) +
ggtitle(gsub("_vs_", " vs ", as.character(input$inputFile))) +
xlab("log2 fold change") +
ylab("-log10 adjusted p-value") +
theme(legend.position = "none",
plot.title = element_text(size = rel(1.5), hjust = 0.5),
axis.title = element_text(size = rel(1.25)))
})
output$selectedProbesTable <- renderDataTable( # table that shows clicked data
selected()
)
}
shinyApp(ui, server, options = list(height = 600))
用户界面