Раскраска по производной непрерывной переменной в поле или столбце ggplot2 - PullRequest
0 голосов
/ 23 октября 2018

Я хотел бы покрасить коробки в своем блокпосте, используя шкалу палитры для непрерывной переменной.

Пример данных:

Sample <- c('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I')
Counts <- c(8, 10, 7, 15, 19, 16, 11, 13, 14)
Group <- c('Group1', 'Group1', 'Group1', 'Group2', 'Group2', 'Group2', 'Group3', 'Group3', 'Group3')
Factor <- c('positive', 'positive', 'negative', 'negative', 'negative', 'negative', 'positive', 'negative', 'negative')
df = data.frame(Sample, Counts, Group, Factor)
df
bxplt <- ggplot(df, aes(x=Group, y=Counts)) + 
  geom_boxplot()
bxplt

Это создает блокпост, подобный этому Example Boxplot

Я хочу включить представление переменной «Фактор» в тот же график.Из-за сложности моих реальных данных я хочу упростить сообщение, раскрасив поля на блокпосте, используя цветовую шкалу, которая отражает соотношение положительного: отрицательного в столбце «Фактор».Я получаю отношения, используя dplyr, как это:

df %>%
  group_by(Factor , Group) %>%
  summarise(n = n()) %>%
  group_by(Group) %>%
  summarise(
    pos_Percent = paste0((n[Factor == "positive"] / sum(n)) * 100 , "%")    , 
    neg_Percent = paste0((n[Factor == "negative"] / sum(n) * 100) , "%")   
  )

Вывод:

# A tibble: 3 x 3
  Group  pos_Percent       neg_Percent      
  <fct>  <chr>             <chr>            
1 Group1 66.6666666666667% 33.3333333333333%
2 Group2 %                 100%             
3 Group3 33.3333333333333% 66.6666666666667%

Я хочу, чтобы ящики с полями были окрашены на основе значений 'pos_Percent', то есть 'Group1будет 67%, группа 2 ноль и группа 3 33%.Я хочу установить непрерывную цветовую палитру, используя эти переменные, например, «Blues» от Rcolorbrewer, но я не уверен, что делать дальше.

ОБНОВЛЕНИЕ Решение, которое сработало для меня (с iod) -

summary<-df %>%
  group_by(Group) %>%
  summarise(
    pos_Percent = sum(Factor == "positive") / n(), 
    neg_Percent = sum(Factor == "negative") / n())   
newdf<-left_join(df, summary)
ggplot(newdf, aes(x=Group, y=Counts)) + 
  geom_boxplot(aes(fill=pos_Percent))

1 Ответ

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

На самом деле, если подумать, есть более простой способ, так как нет оснований для подведения итогов (как отметил Камиль в комментарии выше):

df<- df %>%
  group_by(Group) %>%
  mutate(pos_Percent=sum(Factor == "positive") / n(),
         neg_Percent = sum(Factor == "negative") / n())

ggplot(df, aes(x=Group, y=Counts)) + 
  geom_boxplot(aes(fill=pos_Percent))
...