如何基于各列制作点图并突出首尾5个数据点
ggplot合并Value1/Value2与Number的点图并突出指定数据点
需求说明
需要在同一张图中展示Value1、Value2与Number的关系,同时让前5个和后5个数据点显示为更大尺寸。
解决方案步骤
1. 加载数据
首先加载提供的数据框:
df <- structure(list(Number = 1:23, Value1 = c(0.054830335, 1.19531842, 3.27820329, 1.03530176, 5.77430976, 3.72944, -0.683513395, 0.029550239, 2.487922644, 0.533448117, 0.098825565, -1.089022938, 2.301631235, -0.095666867, -1.359480317, -1.359480317, 1.089441628, 3.307589929, 4.67838434, 3.562761178, 2.630726653, 1.795107015, 2.616255192 ), Value2 = c(-0.296874921, 1.491747294, 2.951219257, 1.258677675, -8.68096591, 3.361029751, -1.824459195, -1.445827538, 1.889631269, -15.47774216, 3.085461276, -1.078286963, 0.948056999, -2.109354753, -1.36703068, -1.36703068, 1.074642842, 2.945589842, 3.757911793, 2.765225717, 2.44452491, 1.784451022, 1.158493893)), class = "data.frame", row.names = c(NA, -23L))
2. 宽表转长表
使用gather(或tidyverse推荐的pivot_longer)将数据转换为适合分组绘图的长格式:
# 加载tidyverse包(包含gather/pivot_longer) library(tidyverse) # 宽表转长表 plotDf <- df %>% gather(key = "Group", value = "Myvalue", -Number) # 或者用pivot_longer(更推荐的现代语法) # plotDf <- df %>% # pivot_longer(cols = -Number, names_to = "Group", values_to = "Myvalue")
3. 添加标记变量区分需要放大的点
新增一列PointSize,标记前5个(Number 1-5)和后5个(Number 19-23)数据点:
plotDf <- plotDf %>% mutate(PointSize = case_when( Number %in% 1:5 ~ "Large", Number %in% 19:23 ~ "Large", TRUE ~ "Small" ))
4. 绘制带大小区分的点图
在ggplot中通过size参数映射PointSize变量,实现指定点放大的效果:
ggplot(plotDf, aes(x = Number, y = Myvalue, color = Group, size = PointSize)) + geom_point() + # 自定义大小值,让大尺寸更明显 scale_size_manual(values = c(Large = 4, Small = 2)) + theme_classic() + labs(x = "Number", y = "Value", title = "Value1/Value2 vs Number (突出前5和后5数据点)")
代码说明
case_when函数用于精准匹配需要放大的Number范围,生成分组标记scale_size_manual可以自定义大/小尺寸的具体数值,根据需求调整- 保留了
color = Group来区分Value1和Value2系列,同时用大小突出指定数据点
内容的提问来源于stack exchange,提问作者nik
相关产品推荐
相关产品推荐

