如何在R语言stripchart中按条件设置pch参数绘制不同符号?
解决R语言stripchart中pch参数无法按条件显示不同符号的问题
我明白你遇到的问题了——stripchart()的pch参数确实不支持直接传入向量,它只会读取向量的第一个元素,这就是为什么你只看到圆形(pch=16)的原因!下面用base graphics给你两种可行的解决方法:
方法一:先绘空图,再手动添加带不同符号的点
这种方法思路很直接:先建立好stripchart的坐标系,再用points()函数针对性地绘制不同符号的点:
set.seed(7) x <- rpois(20, 5) # 第一步:绘制空的stripchart(只生成坐标轴,不画任何点) stripchart(x, method = "jitter", type = "n") # 第二步:生成和原始数据匹配的抖动y坐标(单组数据默认y=1,抖动在垂直方向) y_jitter <- jitter(rep(1, length(x))) # 第三步:按奇偶条件指定符号绘制点 points(x, y_jitter, pch = ifelse(x %% 2 == 0, 16, 17))
方法二:利用stripchart返回的对象获取抖动位置
stripchart()运行后会返回一个包含坐标信息的列表,我们可以直接用这个列表里的抖动后坐标来绘制,确保抖动效果和原生stripchart完全一致:
set.seed(7) x <- rpois(20, 5) # 运行stripchart并保存结果,同时不显示点 sc_result <- stripchart(x, method = "jitter", type = "n") # 从返回结果中提取抖动后的y坐标(单组数据取列表第一个元素) y_position <- sc_result$y[[1]] # 按条件绘制不同符号的点 points(x, y_position, pch = ifelse(x %% 2 == 0, 16, 17))
额外小技巧:查看stripchart的源码
你说无法查看stripchart的源码,是因为它是一个泛型函数,直接输入stripchart只会看到泛型定义。你可以用下面的命令查看它的默认实现源码:
getAnywhere(stripchart.default)
内容的提问来源于stack exchange,提问作者El-
相关产品推荐
相关产品推荐

