使用MixedPsy包PsychShape绘制渐变色心理测量曲线遇阻求助
解决MixedPsy包PsychShape曲线渐变颜色不生效的问题
问题根源
PsychShape生成的ggplot曲线使用固定颜色,未将颜色美学(color)与x轴的DT变量绑定,导致scale_color_gradient找不到对应的映射关系,因此被直接忽略。
解决方案
方法一:手动基于PsychShape的数据重绘曲线
先提取PsychShape生成的数据集,再手动构建ggplot对象并指定颜色映射:
library(MixedPsy) library(ggplot2) # 获取心理测量曲线的原始数据 psy_data <- PsychShape( pse = MixDelta(model1)[1,1], jnd = MixDelta(model1)[2,1], x.range = c(-2,2), ps.link = c("probit"), ps.size = 2 )$data # 手动绘制带颜色渐变的曲线 ggplot(psy_data, aes(x = x, y = y, color = x)) + geom_line(size = 2) + scale_color_gradient(name = "DT", low = "blue", high = "red") + scale_x_continuous(breaks = c(-2,-1.5,-1,-0.5,0,0.5,1,1.5,2)) + labs( title = "Psychometric Curve", x = "DT = T.target - T.reference [ °C]", y = "Prob. answer 'warmer'" ) + theme( title = element_text(size = 23), axis.text = element_text(size=23), legend.text = element_text(size=21) )
方法二:修改原ggplot对象的图层映射
直接修改PsychShape返回的ggplot对象,给曲线图层添加颜色映射:
library(MixedPsy) library(ggplot2) # 保存原始plot对象 p <- PsychShape( pse = MixDelta(model1)[1,1], jnd = MixDelta(model1)[2,1], x.range = c(-2,2), ps.link = c("probit"), ps.size = 2 ) # 给曲线图层添加color与x变量的映射 p$layers[[1]]$mapping <- aes(x = x, y = y, color = x) # 添加渐变颜色及其他样式设置 p + scale_color_gradient(name = "DT", low = "blue", high = "red") + scale_x_continuous(breaks = c(-2,-1.5,-1,-0.5,0,0.5,1,1.5,2)) + labs( title = "Psychometric Curve", x = "DT = T.target - T.reference [ °C]", y = "Prob. answer 'warmer'" ) + theme( title = element_text(size = 23), axis.text = element_text(size=23), legend.text = element_text(size=21) )
原理说明
scale_color_gradient是用于映射连续变量到颜色渐变的标度,必须配合aes(color = 连续变量)使用才能生效。原代码中没有将曲线颜色与x变量绑定,因此该标度无法找到作用对象,最终被ggplot忽略。
内容的提问来源于stack exchange,提问作者Laura Battistel
相关产品推荐
相关产品推荐

