You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ggplot与tidyverse构建矩阵型散点图

问题解决:焦虑条目频率-强度散点图构建

你的现有代码存在核心逻辑偏差:当前数据集为长格式,每个条目被拆分为频率(Freq)、强度(Int)两行记录,但你直接将类别标识type2作为X轴,完全不符合“X轴为频率评分、Y轴为强度评分”的需求。需要先转换数据格式,再完成绘图。

步骤1:转换数据为宽格式

使用tidyr::pivot_wider将长格式数据转为宽格式,让每个条目对应一行,同时包含频率和强度两个评分列:

# 加载依赖包
library(tidyverse)

# 格式转换
df_wide <- df %>%
  pivot_wider(
    id_cols = item,          # 按条目分组
    names_from = type2,      # 用type2的取值作为新列名
    values_from = value      # 对应填充评分值
  )

步骤2:处理异常值(可选)

原数据中存在0值,但你的量表是1-5的Likert评分,这可能是缺失值或录入错误。可选择过滤这类条目:

# 筛选出评分在1-5范围内的条目
df_wide_clean <- df_wide %>%
  filter(Freq %in% 1:5, Int %in% 1:5)

步骤3:绘制目标散点图

用转换后的宽数据绘图,X轴为频率评分,Y轴为强度评分,每个点对应一个条目:

ggplot(df_wide_clean, aes(x = Freq, y = Int)) +
  geom_jitter(width = 0.2, height = 0.2, alpha = 0.7) +  # 添加抖动避免点重叠
  scale_x_continuous(
    name = "频率评分",
    breaks = 1:5,
    limits = c(0.5, 5.5)  # 扩展轴范围提升视觉效果
  ) +
  scale_y_continuous(
    name = "强度评分",
    breaks = 1:5,
    limits = c(0.5, 5.5)
  ) +
  theme_minimal()

关键修正说明

  • 原代码中scale_x_discrete设置的limits=c("1","2","3","4","5")完全错误,因为type2的取值是Freq和Int,与数值1-5无关。
  • geom_jitter的width和height参数可调整抖动幅度,避免相同评分的点完全重叠。
  • 若无需过滤0值,直接使用df_wide绘图即可,可通过limits参数隐藏0刻度。

内容的提问来源于stack exchange,提问作者Luis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 20:17:26