Используйте значения viridis и Map для раскраски гистограммы - PullRequest
0 голосов
/ 11 июня 2018

Я пытаюсь воссоздать два графика слева: градиент цвета должен быть светлее в 0 и темнее при экстремальных значениях.Я хочу использовать пакет viridis для создания цветового градиента.distribution plot

Вот мой пример набора данных:

library(tidyverse)
library(viridis)
# simulate t-values
data = data.frame(sim =1:10000,
                  t_0= rt(n = 10000,df =12, ncp=0), 
                  t_1 = rt(n = 10000,df =12, ncp=1.2))
# compute p-values
data = data %>% 
  mutate(p_0 = 2* pt(t_0, df=12, lower.tail = ifelse(t_0 > 0,FALSE ,TRUE)),
         p_1 = 2* pt(t_1, df=12, lower.tail = ifelse(t_1 > 0,FALSE ,TRUE)))

# convert from wide to long
data.long = data %>% 
  gather(condition,measurement, t_0:p_1) %>%
  separate(col=condition, into=c("para","hyp"), sep = "_")

# convert to wide repeated measures format
data.wide = data.long %>% spread(key = para, measurement)

Вот то, что я пробовал, однако цвет здесь сосредоточен вокруг среднего значения наось х вместо центрирования на 0. Я не могу понять, как все сделать правильно, я думаю, что это что-то из-за попытки использовать scale_fill с гистограммой.

ggplot(data.wide) + 
  geom_histogram(aes(x=t,fill=..x..),
                 binwidth=.01 )+
  scale_fill_gradientn(colours = c(viridis::viridis(5),
                                   rev(viridis::viridis(5))[2:5]))+
  facet_wrap(~ hyp  ,ncol=1)

Что дает мне такой вывод:

plot output

1 Ответ

0 голосов
/ 12 июня 2018

С scale_fill_gradientn есть функция масштабирования, которая отображает ваши наблюдаемые значения в [0,1] для выполнения раскраски.Вы можете создать свой собственный масштабатор, чтобы разместить определенное число в середине.Например,

center_around <- function(center=0) {
  function(x, to=NA, from=NA) {
    r <- max(abs(from-center))
    (x - (center-r)) / 2/r
  }
}

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

ggplot(data.wide) + 
  geom_histogram(aes(x=t,fill=..x..),
                 binwidth=.01 )+
  scale_fill_gradientn(colours = c(viridis::viridis(5),
                                   rev(viridis::viridis(5))[2:5]),
                       rescaler = center_around(0))+
  facet_wrap(~ hyp  ,ncol=1)

Для получения

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...