2016-08-09 5 views
1

Я пытаюсь сделать сюжет, используя ggplot2 для следующих данных: dataR Shiny: Почему не работает ggplot?

Name  date weight height 
Cat1 2016-03-01 34.20000 22.50000 
Cat1 2016-04-01 35.02080 23.01750 
Cat1 2016-05-01 35.86130 23.54690 
Cat1 2016-06-01 36.72197 24.08848 
Cat2 2016-03-01 33.55000 22.96000 
Cat2 2016-04-01 33.61710 23.41920 
Cat2 2016-05-01 33.68433 23.88758 
Cat2 2016-06-01 33.75170 24.36534 

код я использую:

library("shiny") 
library("xlsx") 
library("ggplot2") 

animal <- read.xlsx("C:\\data\\animals.xlsx",1) 

ui<- fluidPage(
titlePanel("Animals"), 
sidebarLayout(
sidebarPanel(
    helpText("Create graph of height or weight animals"), 

    selectInput("anim", 
       label = "Choose an animal", 
       choices = c("Cat1", "Cat2"), 
       selected = "Cat1"), 

    selectInput("opti", 
       label = "Option", 
       choices = c("weight", "height"), 
       selected = "weight") 
), 
    mainPanel(plotOutput("graph")) 
)) 

server <- function(input, output){ 
    output$graph <- renderPlot({ 
    p2 <- ggplot(subset(animal, Name %in% input$anim)) + geom_line(aes(x=date, y = input$opti)) 
    print(p2) 
}) 
} 
shinyApp(ui=ui, server= server) 

Я не получаю сообщение об ошибке, но вывод графика - это прямая линия (plot). Я не понимаю, почему, если я помещаю код в командное окно с ggplot, он действительно работает.

ответ

1

С вашей у эстетике является пользователем при условии ввода, а не жестко закодированы идентификатор R, вам нужно использовать aes_string вместо aes:

p2 = ggplot(subset(animal, Name %in% input$anim)) + 
    geom_line(aes_string(x = 'date', y = input$opti)) 

Заметьте, что теперь нужно в кавычки x эстетический.

Боковое примечание: вы можете print ggplots, но я всегда нахожу это странным: что означает печать сюжета? plot это вместо:

plot(p2) 

Это то же самое, он просто выглядит более логичным.


Для записи, я знаю, почему ggplot2 обеспечивает print функцию. Это аккуратный трюк. Просто не имеет смысла называть это явным образом.

+0

@jdharrison Nah, они идентичны: 'same (ggplot2 ::: plot.ggplot, ggplot2 ::: print.ggplot)' → 'TRUE'. –

+0

Благодарим вас за ответ! Однако код, похоже, не работает. Теперь я получаю пустой сюжет без линии. – Hav11

+0

Я думаю, что это должен быть aes_string? Так что попробуйте точно так же, но измените 'aes_' на 'aes_string' – Pete900

Смежные вопросы