基于排名为散点图点着色:mtcars数据集散点图颜色配置咨询
解决mtcars散点图的分组颜色设置问题
当然可以实现你想要的效果!我来一步步给你拆解怎么做:
一、指定mpg最大值和最小值对应点的颜色
核心思路是先创建一个默认颜色的向量,再找到mpg最大、最小值对应的行索引,最后修改这些索引位置的颜色即可:
# 初始化颜色向量,默认设为你原来用的红色 color_vec <- rep("red", nrow(mtcars)) # 找到mpg最大值对应的行索引 max_mpg_pos <- which(mtcars$mpg == max(mtcars$mpg)) # 找到mpg最小值对应的行索引 min_mpg_pos <- which(mtcars$mpg == min(mtcars$mpg)) # 将最大值点设为绿色,最小值点设为你想要的颜色(比如蓝色) color_vec[max_mpg_pos] <- "green" color_vec[min_mpg_pos] <- "blue" # 绘制散点图 plot(mpg ~ hp, col = color_vec, data = mtcars)
二、基于子组分配颜色(Top3/Bottom3高效车)
如果要把3辆mpg最高的车设为绿色,3辆最低的设为红色,其他点用默认颜色,我们可以通过排序来定位这些子组的索引:
基础版(无并列情况)
# 对mpg从高到低排序,获取对应的行索引 sorted_mpg_idx <- order(-mtcars$mpg) # 提取Top3高效车的索引 top3_idx <- sorted_mpg_idx[1:3] # 提取Bottom3低效车的索引 bottom3_idx <- sorted_mpg_idx[(nrow(mtcars)-2):nrow(mtcars)] # 初始化颜色向量,默认用灰色(你可以换成任意喜欢的颜色) color_vec <- rep("gray", nrow(mtcars)) # 给Top3设绿色,Bottom3设红色 color_vec[top3_idx] <- "green" color_vec[bottom3_idx] <- "red" # 绘图 plot(mpg ~ hp, col = color_vec, data = mtcars)
进阶版(处理mpg并列的情况)
如果存在多辆车mpg相同的情况(比如有4辆车并列Top3),用rank函数可以更准确地筛选出排名在前3和后3的车:
# 计算mpg的降序排名(数值越小排名越高) mpg_rank <- rank(-mtcars$mpg) # 筛选排名<=3的Top3车 top3_idx <- which(mpg_rank <= 3) # 筛选排名>= (总数据量-2)的Bottom3车 bottom3_idx <- which(mpg_rank >= (nrow(mtcars)-2)) # 后续颜色设置和绘图和之前一致 color_vec <- rep("gray", nrow(mtcars)) color_vec[top3_idx] <- "green" color_vec[bottom3_idx] <- "red" plot(mpg ~ hp, col = color_vec, data = mtcars)
内容的提问来源于stack exchange,提问作者regents
相关产品推荐
相关产品推荐

