在我闪亮的应用程序中,我有一个反应式的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(), 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"]])])
如何解决这个问题?
答案 0 :(得分:0)
使用时:
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()
中任何内容的最后一行作为该反应性元素的值返回。因此,在您的情况下,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)
})