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

如何用ggplot绘制R数据框每行对应各列值的黑白点散点图

解决方案

1. 数据预处理

你的原始数据存在两个需要调整的点:

  • PresentDay2列的第一个取值是字母O,不是数字0,需要先修正为一致的数值格式
  • ggplot2更适配长表结构,需要先把宽格式的观测数据转换为长格式
    代码如下:
# 加载所需包
library(ggplot2)
library(tidyr)
library(dplyr)

# 修正原始数据错误,转换为长表
observations <- data.frame( 
  "Individuals" = c("Individual1", "Individual2", "Individual3"),
  "PresentDay1" = c("0","1","1"),
  "PresentDay2" = c("0","1","1") # 修正原数据的字母O为数字0
) %>% 
  pivot_longer(
    cols = starts_with("Present"),
    names_to = "Day",
    values_to = "PresentStatus"
  ) %>% 
  mutate(PresentStatus = factor(PresentStatus, levels = c("0", "1")))

2. 绘图实现

使用geom_point的实心可填充样式,根据在场状态设置填充色即可实现需求:

ggplot(observations, aes(x = Day, y = Individuals)) +
  # 用shape=21的带边框点,避免白色的不在场点和背景融为一体
  geom_point(aes(fill = PresentStatus), shape = 21, size = 8, color = "black") +
  # 手动设置填充色:1=在场黑,0=不在场白
  scale_fill_manual(
    values = c("0" = "white", "1" = "black"),
    labels = c("不在场", "在场"),
    name = "在场状态"
  ) +
  # 调整轴标签和主题
  labs(x = "观测日期", y = "个体") +
  theme_bw() +
  theme(
    axis.text = element_text(size = 11),
    legend.position = "bottom"
  )

效果说明

  • Y轴按顺序展示3个个体名称
  • X轴刻度为PresentDay1、PresentDay2两个观测日期
  • 状态为1的位置显示实心黑点,状态为0的位置显示带黑色边框的白点

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:48:03