如何为含多类型值的DataFrame绘制分类颜色散点图?
解决多类型散点图绘制问题
要实现每个类型对应不同颜色的散点图,核心是先把包含多值的types列拆分成长格式数据(每个ID的单个类型单独占一行),之后就能用常规的ggplot语法绘图了。
1. 拆分多值列
使用tidyr包的separate_rows()函数可以快速拆分逗号分隔的多值列:
library(tidyr) library(ggplot2) # 将types列按逗号拆分,生成每行对应单个类型的长数据 df_long <- separate_rows(df, types, sep = ",")
拆分后的数据示例:
ID types grade num a01 a 7.1 1 a01 b 7.1 1 a01 c 7.1 1 a02 c 7.7 3 a02 d 7.7 3 a03 c 7.3 4 a04 a 7.9 5 a04 c 7.9 5 a04 f 7.9 5 a05 a 6.7 3 a05 c 6.7 3 a05 e 6.7 3
2. 绘制散点图
用拆分后的长数据绘图,直接将types映射到颜色参数即可:
ggplot(df_long, aes(x = num, y = grade, colour = types)) + geom_point(size = 3) # 调整点大小提升可读性
如果想避免同一个ID的多个类型点完全重叠(和参考图效果更接近),可以给坐标添加微小的随机偏移:
ggplot(df_long, aes(x = num + rnorm(nrow(df_long), 0, 0.1), y = grade + rnorm(nrow(df_long), 0, 0.05), colour = types)) + geom_point(size = 3)
内容的提问来源于stack exchange,提问作者Dahlia
相关产品推荐
相关产品推荐

