Как сделать так, чтобы все факторы на графике были одного цвета независимо от того, сколько их в R? - PullRequest
0 голосов
/ 17 июня 2020

У меня есть график с разделом geom_area (), который показывает, активно событие или нет на определенном этапе моделирования (спасибо сообществу за то, что помогли мне с этим!).

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

Я установил заливку geom_area () так, чтобы она соответствовала номеру прогона, а позицию - в position_dodge (0), чтобы иметь возможность перекрывать области так, чтобы чем гуще цвет, тем больше прогонов было активным событием в таком случае. Единственная проблема в том, что меня не интересует различение серий, поэтому я хотел бы, чтобы все они были одного цвета. Мне удалось сделать это с помощью небольшого хака, просто сделав палитру с серым 10 раз, однако это не то, что я могу сделать вручную, так как скоро у меня будут графики с сотнями прогонов.

Как Могу ли я сделать все факторы одного цвета, независимо от их количества? Или, если есть лучшее решение для отображения графика, подобного приведенному ниже, что это?

Включая график, которым я управлял до сих пор (это именно то, что мне нужно, только масштабируемое) и код, который я использовал для сделать это:

enter image description here

ggplot(df,aes(x = step, y = count)) +
  geom_area(data = event, aes(x = step, y = pop_size * event, fill = as.factor(run_num)),
            inherit.aes = FALSE, position = position_dodge(0), alpha = 0.2, show.legend = FALSE) +
  geom_point(aes(color = breed), alpha = 0.7, size = 1) +
  scale_color_brewer(palette = "Set3") +
  # horrible hack incoming
  scale_fill_manual(values = c("lightgrey","lightgrey","lightgrey","lightgrey","lightgrey",
                               "lightgrey","lightgrey","lightgrey","lightgrey","lightgrey")) +
  coord_cartesian(ylim = c(0, pop_size))

1 Ответ

1 голос
/ 18 июня 2020

Решено благодаря комментарию da-wells выше, который предложил использовать scale_fill_manual(values = rep("lightgrey", n_simulations)), чтобы палитра охватывала, несмотря на многие факторы, которые у меня есть. Не могу поверить, что не подумал об этом!

...