簡體   English   中英

R,有光澤:以反應性數據為框架,設置水平和順序

[英]R, shiny: reactive data.frame as a factor, set levels and order

在我閃亮的應用程序中,我有一個反應式的data.frame。 然后將data.frame提供給ggplot並制作條形圖。 但是,我想在條形圖中設置條形的確切順序。 我可以做的

    JOIN11$ID_Polymer <- factor(JOIN11$ID_Polymer, 
                            levels=JOIN11$ID_Polymer[order(JOIN11[["Content"]])])

在我的R腳本中(在閃亮的服務器之外准備數據的function() )。

我想在閃亮的服務器中設置順序,以便用戶可以更改排序參數(用戶可以決定是否要通過“內容”或他選擇的其他某些列對data.frame進行排序)。 我正在嘗試這樣的事情:

dataforplot <- reactive({
  plot_data <-  data() %>% 
    filter(Name %in% input$polymers) 
   plot_data$ID_Polymer <- factor(plot_data$ID_Polymer, 
          levels =plot_data$ID_Polymer[ order(plot_data[["Content"]])])
})

該命令不起作用(不顯示ggplot ),錯誤提示: data must be a data frame, or other object coercible by fortify() ggplot data must be a data frame, or other object coercible by , not a factor

ggplot的功能如下所示:

  plotInput <- reactive({



    ggplot(data = dataforplot(), aes(x = ID_Polymer, y = value), position = position_dodge(width = 1))  +
      geom_bar(aes_string( fill=razeni()), position = position_dodge(width = 1), stat="identity", color="white")+
      theme_minimal() +
      theme(legend.text=element_text(size=21))+
      theme(text = element_text(size=21))+
      theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank()) +
      ggtitle(input$title_text_box_id) + 
      labs(x = "", y = input$ylabel_text_box_id) + 
      geom_text(aes(x = ID_Polymer, y = value,Group=Polymer,label=value), 
                position = position_dodge(width = 1),vjust=2, size=5,colour = "white", fontface = "bold") +
      scale_fill_tableau("Tableau 10")+
     scale_x_discrete(labels=c(xpopisky()))#puts a reactive in x labels

  })

當我不嘗試將命令設置為data.fram時,當我省略

plot_data$ID_Polymer <- factor(plot_data$ID_Polymer, 
          levels =plot_data$ID_Polymer[ order(plot_data[["Content"]])])

如何解決呢?

使用時:

dataforplot <- reactive({
  plot_data <-  data() %>% 
    filter(Name %in% input$polymers) 
   plot_data$ID_Polymer <- factor(plot_data$ID_Polymer, 
          levels =plot_data$ID_Polymer[ order(plot_data[["Content"]])])
})

reactive()內部的任何內容的最后一行都作為該React元素的值返回。 因此,在您的情況下, plot_data$ID_Polymer (這不是數據plot_data$ID_Polymer ,而是數據plot_data$ID_Polymer的因數列)作為dataforplot()返回。 這就是錯誤的原因。 將您的dataforplot()定義更改為:

dataforplot <- reactive({
  plot_data <-  data() %>% 
    filter(Name %in% input$polymers) 
   plot_data$ID_Polymer <- factor(plot_data$ID_Polymer, 
          levels =plot_data$ID_Polymer[ order(plot_data[["Content"]])])
   # Add return statement for returning the dataframe
   return(plot_data)
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM