2016-02-18 4 views
0

Как мы можем получить интерактивные координаты (x и y) нескольких гистограмм в блестящей форме. Я попробовал этот кодНажмите, чтобы получить координаты из нескольких гистограмм в блестящих

#server.R 
library(xts) 
shinyServer(function(input, output,session) { 
output$info <- renderText({ 
    paste0("x=", input$plot_click$x, "\ny=", input$plot_click$y) 
    }) 


output$plot<- renderPlot({ 
set.seed(3) 
Ex <- xts(1:100, Sys.Date()+1:100) 
df = data.frame(Ex,matrix(rnorm(100*3,mean=123,sd=3), nrow=100)) 
df<-df[,-1] 
par(mfrow = c(2,2)) 
for(i in names(df)){ 
hist(df[[i]] , main=i,xlab="x",freq=TRUE,label=TRUE,plot = TRUE) 
} 

}) 
}) 

ui.R

#ui.r 
mainPanel(

     tabsetPanel(type="tab",tabPanel("plot", plotOutput("plot",click = "plot_click"), verbatimTextOutput("info"))   

) 

Проблема с выше код я получаю случайные координаты всего участка как этот

x=124.632301932263 
y=20.4921068342051 

вместо этого я хочу, чтобы получить координаты отдельных графиков с соответствующими значениями. Например, если я щелкнул любое место в таблице X1, я должен получить координаты x и y этого графика. Как я могу это сделать?

ответ

1

Первоначально я собирался сказать, что это происходит потому, что щелчок определяются пикселями участка вместо данных, но я опровергнут here:

Обратите внимание, что х и у координаты масштабируется до данных, а не просто является пиксельными координатами. Это позволяет легко использовать эти значения для выбора или фильтрации данных.

вместо этого я буду честно предположить, что в графическом устройстве Блестящая не может сказать, разница между отдельными участками, на которых решение было бы создать отдельные устройства для каждого участка:

Ui .R

library(shiny) 
shinyUI(
    tabsetPanel(type="tab", 
       tabPanel("plot", 
         uiOutput("coords"), 
         uiOutput("plots") 
         ) 
      ) 
) 

server.R

library(xts) 
set.seed(3) 

Ex <- xts(1:100, Sys.Date() + 1:100) 
df <- data.frame(Ex, matrix(rnorm(100*3, mean = 123, sd = 3), nrow = 100)) 
cn <- colnames(df) 
df <- df[, cn[cn != "Ex"]] 

n_seq <- seq(ncol(df)) 
shinyServer(function(input, output, session) { 

    output$plots <- renderUI({ 
    plot_output_list <- lapply(n_seq, function(i) { 
     plotOutput(paste0("plot", i), click = paste0("plot_click", i), 
       height = 250, width = 300) 
    }) 
    }) 

    for (i in n_seq) { 
    output[[paste0("plot", i)]] <- renderPlot({ 
     hist(df[[i]] , main = i, xlab = "x", freq = TRUE, label = TRUE) 
    }) 
    } 

    output$coords <- renderUI({ 
    coords_output_list <- lapply(n_seq, function(i) { 
     renderText({ 
     set <- input[[paste0("plot_click", i)]] 
     paste0("Plot ", i, ": x=", set$x, "\ny=", set$y) 
     }) 
    }) 
    }) 
}) 
+0

Спасибо за код, но можете ли вы рассказать мне, что здесь hapenning? Lapply (n_seq, function (i) { renderText ({ set <- input [[paste0 ("plot_click", i)]] ' – Eka

+1

, поскольку клик для каждого графика устанавливается как 'input $ plot_click ', мы используем именованные записи списка 'input', чтобы захватить клики для каждого графика. например 'x <- list (plot_click1 = list (x = 1, y = 2)); х [[ "plot_click1"]]; ' – mlegge