我正在为ggplot中的条形顺序苦苦挣扎。为简单起见:这是我用来创建绘图的代码:
plot_data <- data() %>%
filter(Name %in% input$polymers)
print(plot_data)
ggplot(data = plot_data, 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
fill参数是反应性的,由用户在闪亮的应用程序中选择。 结果看起来像这样:
我希望两个蓝色的条和两个红色的条并排,就像这篇文章ggplot can not group bars
棘手的是,填充参数会根据闪亮应用程序的用户输入而变化,因此必须更改条形的顺序。
类似:
aes_string(dodge = razeni())
或aes_string(order = razeni())
我希望这个问题已经解决,并且希望对如何处理它提出任何建议。
答案 0 :(得分:0)
因此,如果有人遇到同样的问题,这是我的解决方案,适用于我的情况:
首先,我用数据创建一个反应式data.frame
。然后,将表的选定列作为因子(在我的情况下为“ ID_Polymer”),设置因子的级别,并使用order()
函数和由用户选择的参数(由在shinyUI()
中selectInput
input$groupby
中)。代码如下:
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[[input$groupby]])])
return(plot_data) # so it returns the data frame and not only the column plot_data$ID_Polymer
})
然后我只创建一个ggplot:
plotInput <- reactive({
ggplot(data = dataforplot(), aes(x = ID_Polymer, y = value), position = position_dodge(width = 1)) +
})
此解决方案对我有用,希望对您有所帮助。