如何用R绘制类似Excel的分组散点图?含数据及技术问题
R语言散点图绘制问题解决
需求与数据
需要绘制包含两组数据的散点图,原始数据如下:
| 分钟数 | 组1 | 组2 |
|---|---|---|
| 1 | 199 | 176 |
| 2 | 188 | 157 |
| 3 | 169 | 144 |
遇到的问题
- 如何将两组数据放置在同一张散点图中
- 如何调整图表的坐标轴范围与刻度
原始尝试代码
install.packages("tidyverse") library(tidyverse) fnames = c(1, 2, 3) g1 = c(119, 118, 157) g2 = c(176, 157, 144) hr_data_class = tibble(Minutes = fnames,Group_1 = g1,Group_2 = g2) print(hr_data_class) ggplot(hr_data_class, aes(x=fnames,, y=g1 + g2, color=cyl, shape=cyl)) + geom_point(shape=6, color= "#154734") + labs(x="Time (Minutes)",y="Heart Rate (BPM)") ggplot(hr_data_class, aes(x=g1,, y=g2, color=cyl, shape=cyl)) + geom_point(shape=6, color= "#154734") + labs(x="Time (Minutes)",y="Heart Rate (BPM)") plot(fnames,g1,col='red',pch=19,cex=3,xlab='X1',ylab='Y1',main='hello world') plot(fnames,g2,col='red',pch=19,cex=3,xlab='Time (Minutes)',ylab='Heart Rate (BPM)',main='Class Heart Rate Data')
问题分析与解决方案
1. 多组数据同图绘制
ggplot2更适合处理长格式数据,需先将现有宽格式数据转换为长格式,通过pivot_longer实现,之后用颜色/形状区分组别即可。
2. 坐标轴范围与刻度调整
使用scale_x_continuous()和scale_y_continuous()函数,通过limits设置范围,breaks设置刻度间隔,比基础的xlim()/ylim()更灵活。
完整修正代码
# 安装并加载tidyverse(首次运行需执行install) install.packages("tidyverse") library(tidyverse) # 使用表格中的正确数据创建数据框 Minutes <- c(1, 2, 3) Group_1 <- c(199, 188, 169) Group_2 <- c(176, 157, 144) hr_data_class <- tibble(Minutes, Group_1, Group_2) # 转换为长格式数据 hr_data_long <- hr_data_class %>% pivot_longer( cols = starts_with("Group_"), names_to = "组别", values_to = "心率" ) # 绘制散点图并调整坐标轴 ggplot(hr_data_long, aes(x = Minutes, y = 心率, color = 组别, shape = 组别)) + geom_point(size = 3) + # 设置点大小 labs(x = "时间(分钟)", y = "心率(BPM)", title = "两组心率数据散点图") + # 调整X轴范围与刻度 scale_x_continuous(limits = c(0, 4), breaks = seq(1, 3, 1)) + # 调整Y轴范围与刻度(可根据需求修改数值) scale_y_continuous(limits = c(140, 210), breaks = seq(140, 210, 10)) + theme_minimal() # 可选:应用简洁主题
代码说明
- 数据转换:
pivot_longer将宽格式的Group_1/Group_2列转换为"组别"列,对应心率值存入"心率"列,方便ggplot分组。 - 分组绘制:
aes()中用color = 组别和shape = 组别让两组数据以不同颜色和形状展示,自动生成图例。 - 坐标轴调整:
limits定义坐标轴的显示范围,breaks设置刻度的显示间隔,可根据实际需求修改数值。
内容的提问来源于stack exchange,提问作者Joshua W. Kelly
相关产品推荐
相关产品推荐

