You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 06:12:17