ggplot2绘制同尺度双Y变量散点图:如何修改美学样式并添加独立回归线(适配APA格式)
解决APA风格双变量散点图(含独立回归线)的问题
看起来你已经走了一半的路啦!问题的核心在于你的数据目前是宽格式(两个Y变量列:valence和arousal),而ggplot更适合处理长格式数据(把这两个变量合并成一列,用另一列标记类别)。这样我们就能轻松用视觉属性区分两组数据,并自动生成各自的回归线。
下面是完整的解决方案:
步骤1:将数据转换为长格式
首先用tidyr包的pivot_longer函数把宽数据转成长数据(如果还没装tidyr的话,先运行install.packages("tidyr")):
library(tidyr) library(ggplot2) # 转换数据格式 dat_long <- dat %>% pivot_longer(cols = c(valence, arousal), # 指定要合并的Y变量列 names_to = "variable", # 新列的名称,用来标记是valence还是arousal values_to = "score") # 新列的名称,存储对应的数值
步骤2:绘制带区分样式和独立回归线的散点图
现在用长数据来绘图,我们可以用shape参数区分实心/空心点,同时让geom_smooth自动为每个变量生成回归线:
sp_both <- ggplot(dat_long, aes(x = STAIT, y = score, shape = variable)) + geom_point(size = 2) + # 设置点大小,让样式更清晰 geom_smooth(method = lm, se = TRUE, fullrange = TRUE, colour = "black") + # 每个变量独立生成回归线 labs(x = "STAI-T score", y = "valence/arousal score", shape = "Variable") + # 设置图例标题 scale_shape_manual(values = c(1, 16)) + # 手动指定样式:1=空心圆,16=实心圆 apatheme # 应用你的APA主题 # 查看图形 print(sp_both)
代码解释
pivot_longer:把原来的两个Y变量列合并成两列:variable(标记是valence还是arousal)和score(存储对应的数值),这是让ggplot能分组处理的关键。aes(shape = variable):告诉ggplot根据variable列的值来区分点的形状,同时geom_smooth也会自动按这个分组生成各自的回归线和置信区间。scale_shape_manual:手动指定形状,1是空心圆,16是实心圆,你也可以根据需求换成其他形状(比如2=空心三角,17=实心三角等)。- 所有的APA主题设置(
apatheme)会正常应用,不会影响分组和回归线的显示。
这样你就能得到一张符合需求的图:同一个X轴,Y轴是合并后的分数,用实心/空心点区分两个变量,同时每条变量都有自己的回归线和置信区间,完全符合APA格式的要求。
内容的提问来源于stack exchange,提问作者Eva Beunk
相关产品推荐
相关产品推荐

