R, блестящий: ggplot, geom_bar, порядок баров по аргументу заполнения, когда заполнение является реактивным - PullRequest
0 голосов
/ 23 сентября 2018

Я борюсь с порядком баров в 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

Аргумент заполнения является реактивным, который пользователь выбирает в блестящем приложении.Результаты выглядят так: enter image description here

Мне бы хотелось, чтобы две синие полосы и две красные полосы были рядом, как в этом посте ggplot не может группировать полосы

Хитрость заключается в том, что аргументы заполнения изменяются в зависимости от ввода пользователя из блестящего приложения и поэтому должны менять порядок баров.

что-то вроде: aes_string(dodge = razeni()) или aes_string(order = razeni())

Я надеюсь, что проблема ясна, и я буду рад любым предложениям о том, как с ней бороться.

1 Ответ

0 голосов
/ 09 октября 2018

Итак, если кто-то борется с той же проблемой, вот мое решение, которое сработало для моего случая: сначала я создаю реактив 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)) +
})

Это решение сработало для меня, поэтому я надеюсь, что оно поможет.

...