R,有光泽:ggplot,geom_bar,填充为反应型时,其填充参数的条形顺序

时间:2018-09-23 14:23:26

标签: r ggplot2 shiny geom-bar

我正在为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参数是反应性的,由用户在闪亮的应用程序中选择。 结果看起来像这样: enter image description here

我希望两个蓝色的条和两个红色的条并排,就像这篇文章ggplot can not group bars

棘手的是,填充参数会根据闪亮应用程序的用户输入而变化,因此必须更改条形的顺序。

类似: aes_string(dodge = razeni())aes_string(order = razeni())

我希望这个问题已经解决,并且希望对如何处理它提出任何建议。

1 个答案:

答案 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)) +
})

此解决方案对我有用,希望对您有所帮助。