Установка галочки линии geom_boxplot на основе существенной разницы - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь выделить существенную разницу между указанными c группами по сравнению с контролем, выделив их соответствующие графы и метки жирным шрифтом. Однако я понятия не имею, как мне начать с этого. Прямо сейчас у меня есть что-то вроде этого:

cat <- c(replicate(50, "a"), replicate(50, "b"), replicate(50, "c"))
foo <- rnorm(150)
bar <- c(rnorm(100, 2), rnorm(50, 4))
foobar <- c(rnorm(50, 5), rnorm(100,2))
df <- data.frame("category" = cat, "foo" = foo, "bar" = bar, "foobar" = foobar) %>% gather(key = "key", value = "value", 2:4)

ggplot(df, aes(x=category, y=value)) + 
  geom_boxplot() +
  facet_grid(key ~ .)

, который производит следующее изображение:

enter image description here

Допустим, что для категории "b "и" c "измерение" foobar "значительно отличается по сравнению с" a ", и для категории" c "измерение" c "также сравнивается с" a ". Есть ли способ выделить эти поля (например, выделив их жирным шрифтом)?

Спасибо

1 Ответ

0 голосов
/ 30 апреля 2020

Вот один способ, которым я могу придумать, чтобы выделить определенные c коробочные диаграммы на основе стандартного отклонения набора. Пока вы будете следовать логике программирования c, вы сможете адаптироваться к другим методам маркировки.

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

# create a column for standard deviation for individual categories within the groups
df.avg <- df %>% group_by(key,category) %>% summarize(sd.val=sd(value))

# merge both datasets to "add" the summary data in long/tidy format
df.merge <- merge(df, df.avg)

# the plot
ggplot(df.merge, aes(x=category, y=value)) + 
    geom_boxplot(aes(fill=sd.val), alpha=0.8) +
    facet_grid(key ~ .) +
    scale_fill_gradient(name='Std Dev', high='red', low='green')

enter image description here

Если вы хотите только обозначить «порог» стандартного отклонения (например, только значения SD, которые больше, чем 1,1 в красном), это может работать:

ggplot(df.merge, aes(x=category, y=value)) + 
    geom_boxplot(aes(fill=eval(sd.val>1.1)), alpha=0.8) +
    facet_grid(key ~ .) +
    scale_fill_manual(name=NULL, values=list('TRUE'='red', 'FALSE'='white'),
        labels=list('TRUE'='High SD', 'FALSE'='Low SD'))

enter image description here

...