[英]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.