如何在ggplot2折线图X轴为1的特定点替换标记符号
解决ggplot2折线图特定点标记替换问题
要实现仅将X轴PSF=1的点标记改为三角形,其余保持圆形,无需叠加标记,可通过两种简洁方式实现,具体代码及说明如下:
方法1:拆分图层分别绘制两类点
通过subset()筛选数据,拆分geom_point()为两个图层,彻底避免标记叠加:
library(ggplot2) # 测试数据集(可替换为你的本地数据读取代码) block.data <- structure(list(PSF = c(0, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8, 2), CC = c(0.08278661, 0.1866827, 0.2051862, 0.218509, 0.2247673, 0.2268575, 0.2265966, 0.22522, 0.223409, 0.2213272, 0.2192285 )), class = "data.frame", row.names = c(NA, -11L)) ggplot(data = block.data, aes(x = PSF, y = CC, group = 1)) + geom_line() + # 绘制PSF≠1的点,用默认实心圆(shape=19) geom_point(data = subset(block.data, PSF != 1), size = 2, shape = 19) + # 绘制PSF=1的点,用实心上三角(shape=17) geom_point(data = subset(block.data, PSF == 1), size = 2, shape = 17) + theme_bw() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), panel.background = element_blank(), axis.line = element_line(colour = "black")) + scale_x_continuous(breaks = seq(0, 2, .2)) + scale_y_continuous(breaks = seq(0.08, 0.23, .01)) # 调整y轴刻度适配数据范围
方法2:映射shape变量实现
将PSF==1作为形状映射变量,手动指定对应标记,同时隐藏不必要的图例:
ggplot(data = block.data, aes(x = PSF, y = CC, group = 1)) + geom_line() + geom_point(aes(shape = PSF == 1), size = 2) + scale_shape_manual(values = c("FALSE" = 19, "TRUE" = 17), guide = "none") + theme_bw() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), panel.background = element_blank(), axis.line = element_line(colour = "black")) + scale_x_continuous(breaks = seq(0, 2, .2)) + scale_y_continuous(breaks = seq(0.08, 0.23, .01))
关键说明:
- 圆形标记对应
shape=19(ggplot2默认实心圆),三角形标记对应shape=17(实心上三角) - 原代码中y轴刻度范围
seq(0.08,23,.01)会生成大量无效刻度,已调整为适配数据的区间
内容的提问来源于stack exchange,提问作者Nikos
相关产品推荐
相关产品推荐

