首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用ggplot2和viridis,基于其他变量填充直方图

利用ggplot2和viridis,基于其他变量填充直方图
EN

Stack Overflow用户
提问于 2018-06-12 00:14:06
回答 1查看 1.7K关注 0票数 3

我试图在这个图形中创建左上角的图形,使用viridis来制作颜色梯度。

这是我的样本数据:

代码语言:javascript
复制
# 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)

要在左边创建图形,我需要根据右边图形中的相应值来对直方图进行着色。如果t=0(对应于p接近1),则图应为黄色,如果t>4 (对应于p接近于0),则填充应为深蓝色。This post展示了如何使用scale_fill_gradientn创建一个类似的图,不幸的是,它不能处理我使用cut()创建的离散值。

这是我最近的一次,但是我希望图上有黄色的x=0混合到深蓝色的边缘。

代码语言:javascript
复制
# create bins based on t-values
t0bins <- seq(-12, 12, by = 1)
# compute corresponding p-values
pt0bins <- 2*pt(t0bins, df = 12, lower.tail = FALSE)



 ggplot(data.wide, aes(x=t, fill=cut(..x.., breaks=get("t0bins", envir=.GlobalEnv)))) +
  geom_histogram(binwidth=0.1)+
  scale_fill_viridis(discrete=T)

这意味着:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-12 12:21:47

你可以试试

代码语言:javascript
复制
library(tidyverse)
library(viridis)
data.wide %>% 
  mutate(bins=cut(t, breaks=t0bins)) %>% 
{ggplot(.,aes(x=t, fill=bins)) +
  geom_histogram(binwidth=0.1)+
  scale_x_continuous(limits =c(-12,12)) +
  scale_fill_manual(drop=FALSE,values = c(viridis(nlevels(.$bins)/2), viridis(nlevels(.$bins)/2, direction = -1)))}

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50807655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档