2013-11-21 18 views
10

Parlak paketle ilk denemelerimi yapıyorum, harika. Ama, her zamanki gibi, bazı sorunlarla karşılaşıyorum. Parlak öğretici ve googleing'in ardından, farklı meteor istasyonlarının iki farklı haritasını göstermeyi, ancak her ikisinin de aynı değişkeni göstermeyi başardım. R seçmeli listeden parlak geçiş değişkenleri reaktif arsaya

enter image description here

Ben çizilecek olan var seçmek mümkün böylece başka bir giriş listesi eklemek istedik. Komut dosyasını çalıştırmaya çalışırken herhangi bir hata olmadan çalışacak gibi görünüyor, ancak hiçbir komplo görünmüyor, sadece seçili menüler var.

Belki de değişkenlerin sunucuya aktarılmasında bir hata olabilir. Bu nedenle, çıktı engelleri, doğru bir şekilde oluşturulmadığından, bir tahmin değil. işlevleri oluşturarak genel yolu girişine bağlı olarak çalışmak için çalıştı

Bu

library("shiny") 
shinyUI(pageWithSidebar(

    headerPanel('Comparación de zonas - Temperatura'), 

    sidebarPanel(
    selectInput("panel1", "Zona:", 
          list("Zona 1" = "1", 
           "Zona 2" = "2", 
           "Zona 3" = "3", 
           "Zona 4" = "4")), 
    selectInput("panel2", "Zona:", 
       list("Zona 1" = "1", 
        "Zona 2" = "2", 
        "Zona 3" = "3", 
        "Zona 4" = "4")), 
    selectInput("var", "Variable:", 
       list("tempc" = "tempc", 
        "relhum" = "relhum")),  
    helpText('Al seleccionar la zona se crearán automáticamente 
    el gráfico de evolución temporal.') 
), 

    mainPanel(
    conditionalPanel(condition = "inputId == 'panel1'",plotOutput('myplot') 
    ), 
    conditionalPanel(condition = "inputId == 'panel2'",plotOutput("myplot") 
    )  
) 
)) 

ui.R

için kodlardır ... vars ama değişkenler geçen belki doğru, belki reaksiyonları ile ilgili, bir şey eksik ve server.R

library(shiny) 
library(plyr) 
library(ggplot2) 

shinyServer(function(input, output) { 

    formulaText <- reactive(function() { 
    paste("Gràfica de ggplot: Zona ", input$zona1) 
    }) 

    # Return the formula text for printing as a caption 
    output$caption <- reactiveText(function() { 
    formulaText() 
    }) 

    # datasets 
    datos=read.table("data.dat",header=T) 
    data=as.data.frame(datos) 
    data=within(data, datetime <- as.POSIXct(paste(date, time),format = "%Y%m%d %H%M%S")) 

    rams <- reactive({ 
    subset(data,data$stat_id %in% places$stat_id[places$Zona == input$panel1])  
    }) 


    plot <- function(var) { 
    p <- ggplot(rams(),aes(x=datetime, y=var, colour=as.character(stat_id))) + 
     geom_line() 
    } 

    plot=p(input$var) 

    if(input$var == "tempc") { 
    plot <- plot + ylab("Temperatura (ºC)") + xlab(" ") + 
     ggtitle(gtitol) + theme(legend.title=element_blank()) + theme(legend.position="bottom") + 
     scale_y_continuous(limits = c(-20,ylim),breaks=c(seq(-20,ylim,by=2))) } 

    if (input$var == "relhum") { 
    plot <- plot + 
     ylab("Humedad relativa (%)") + xlab(" ") + 
     ggtitle(gtitol) + theme(legend.title=element_blank()) + theme(legend.position="bottom") + 
     scale_y_continuous(limits = c(0,100),breaks=c(seq(0,100,by=5))) } 

    output$myplot <- reactivePlot(function() { 
    print(plot) 
    }) 

}) 

Sonunda başardım Yardımlarınız ve tavsiye

+0

'arsa = p (girişi $ var) 'yanlış –

+0

Evet, ama bu tek sorun değildi. Cevabımı aşağıya bakın. Teşekkürler. – pacomet

+0

Aes_string() 'yi bilmek güzel, bu cevabı yazdığınızdan daha iyi. –

cevap

10

için şimdiden teşekkür ederiz. Sorunlar, değişkenlerin ui.R girişinden server.R'ye geçirilmesinde ve ggplot'un böyle bir girişle nasıl başa çıktığıydı. Değişken adları yönetmek için aes_string kullanmak zorunda kaldım. Şimdi, ilk iki seçim listesi, üst/alt çizimde kullanılan veri çerçevesini seçmeye izin verirken üçüncü, farklı ggplot komutları oluşturarak, çizilecek değişkeni seçer.

Simge şu anda çalışıyor olsa da, kodun daha genel bir şekilde çalışabilmesi için en iyi duruma getirilmesi gereken bazı sorunlar vardır. Daha büyük olanı ikiye ayırarak iki farklı veri çerçevesi yapıyorum ve belki bir tane ve alt kümeye sahip olmak daha iyidir. İki koşullu panel için sadece bir tane nasıl yönetileceğini bulamadığım için iki çizim çıktısını (myplot1 ve myplot2) tanımladım. Hala iş var ama parlak bir acemi olarak mutluyum ki koşuyor. Her durumda

benim için çalışan kod takmak ve birinin yardımcı olmasını bekliyoruz:

ui.R

library("shiny") 
shinyUI(pageWithSidebar(

    headerPanel('Comparación de zonas - Temperatura'), 

    sidebarPanel(
    selectInput("panel1", "Zona:", 
          list("Zona 1" = "1", 
           "Zona 2" = "2", 
           "Zona 3" = "3")), 
    selectInput("panel2", "Zona:", 
       list("Zona 1" = "1", 
        "Zona 2" = "2", 
        "Zona 3" = "3")), 
    selectInput("var", "Variable:", 
       list("tempc" = "tempc", 
        "relhum" = "relhum")),  
    helpText('Al seleccionar la zona se crearán automáticamente 
    el gráfico de evolución temporal.') 
), 

    mainPanel(
    conditionalPanel(condition = "inputId == 'panel1'",plotOutput(outputId='myplot1')), 
    conditionalPanel(condition = "inputId == 'panel2'",plotOutput(outputId='myplot2')) 
) 
)) 

server.R

library(shiny) 
library(plyr) 
library(ggplot2) 

shinyServer(function(input, output) { 

    datos=read.table("data.dat",header=T) 
    pobles=read.table("pobles-zona.dat",header=T) 

    data=as.data.frame(datos) 
    places=as.data.frame(pobles) 

    data$time[data$time == "0"] = "000000" 
    data$time[data$time == "10000"] = "010000" 
    data$time[data$time == "20000"] = "020000" 
    data$time[data$time == "30000"] = "030000" 
    data$time[data$time == "40000"] = "040000" 
    data$time[data$time == "50000"] = "050000" 
    data$time[data$time == "60000"] = "060000" 
    data$time[data$time == "70000"] = "070000" 
    data$time[data$time == "80000"] = "080000" 
    data$time[data$time == "90000"] = "090000" 

    data=within(data, datetime <- as.POSIXct(paste(date, time),format = "%Y%m%d %H%M%S")) 

    formulaText <- reactive(function() { 
    paste("Gràfica de ggplot: Zona ", input$panel1, input$panel2, input$var) 
    }) 

    # Return the formula text for printing as a caption 
    output$caption <- reactiveText(function() { 
    formulaText() 
    }) 

    rams1 <- reactive({ 
    subset(data,data$stat_id %in% places$stat_id[places$Zona == input$panel1])  
    }) 
    rams2 <- reactive({ 
    subset(data,data$stat_id %in% places$stat_id[places$Zona == input$panel2])  
    }) 

    p <- function(data){ 
    p=ggplot(data(),aes_string(x="datetime", y=input$var,colour="as.character(stat_id)")) + 
    geom_line() 
    } 

    output$myplot1 <- reactivePlot(function() { 

    gtitol=paste("Zona ",input$panel1) 
    yx=round(max(rams1()$tempc)+2) 
    yn=round(min(rams1()$tempc)-2) 

    plot=p(rams1) 

    if (input$var == "tempc") { 
     plot=plot + ylab("Temperatura (ºC)") + xlab(" ") + 
     ggtitle(gtitol) + theme(legend.title=element_blank()) + theme(legend.position="bottom") + 
     scale_y_continuous(limits = c(yn,yx),breaks=c(seq(yn,yx,by=2))) 
    } 

    if (input$var == "relhum" ){ 
     plot=plot + ylab("Humedad relativa (%)") + xlab(" ") + 
     ggtitle(gtitol) + theme(legend.title=element_blank()) + theme(legend.position="bottom") + 
     scale_y_continuous(limits = c(0,100),breaks=c(seq(0,100,by=5))) 
    } 
    print(plot) 
    }) 

    output$myplot2 <- reactivePlot(function() { 

     gtitol=paste("Zona ",input$panel2) 
     yx=round(max(rams2()$tempc)+2) 
     yn=round(min(rams2()$tempc)-2)  

     plot=p(rams2) 

     if (input$var == "tempc") { 
     ylim=max(rams2()$tempc)+2 
     plot=plot + ylab("Temperatura (ºC)") + xlab(" ") + 
     ggtitle(gtitol) + theme(legend.title=element_blank()) + theme(legend.position="bottom") + 
     scale_y_continuous(limits = c(yn,yx),breaks=c(seq(yn,yx,by=2))) 
     } 
     if (input$var == "relhum" ) { 
     ylim=100 
     plot=plot + ylab("Humedad relativa (%)") + xlab(" ") + 
     ggtitle(gtitol) + theme(legend.title=element_blank()) + theme(legend.position="bottom") + 
     scale_y_continuous(limits = c(0,100),breaks=c(seq(0,100,by=5))) 
     } 
    print(plot) 
    }) 
})