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

如何在ggplot浓度-时间图中添加三角形标注给药时间点?

在ggplot浓度-时间图中添加给药时间点标注三角形的解决方案

核心思路

无需依赖annotation(),直接用geom_point()指定三角形形状,配合单独的给药时间数据集,将三角形置于现有数据上方即可。

步骤1:修复原代码的关键问题

原代码中aes()内的列名加了引号,这会导致ggplot无法正确映射数据列,需先去掉引号:

ggplot(data = df, aes(x = Time, y = Concentration, col = Species)) +
  ylab("Concentration (mg/mL)") + 
  xlab("Time (h)") +
  geom_point() + 
  scale_color_viridis(discrete = TRUE, option = "F", begin = 0, end = 0.8) +
  theme_bw() + 
  scale_y_log10()

步骤2:创建给药时间点数据集

单独构建包含给药时间的数据集,设置三角形的y轴位置为现有浓度最大值的1.2倍(或根据log轴需求调整),确保三角形位于图上方:

# 替换Time为你的实际给药时间点
dose_times <- data.frame(
  Time = c(0, 8, 24),
  # 计算三角形的y位置:比现有最大浓度高20%
  Concentration = max(df$Concentration) * 1.2
)

如果是log10轴,更精准的y位置计算方式:

# 在log轴上比最大值高0.1个log单位
dose_times$Concentration = exp10(max(log10(df$Concentration)) + 0.1)

步骤3:添加三角形标注

在原绘图代码后追加geom_point(),指定三角形形状,同时取消继承主图的颜色映射,避免三角形颜色受Species影响:

ggplot(data = df, aes(x = Time, y = Concentration, col = Species)) +
  ylab("Concentration (mg/mL)") + 
  xlab("Time (h)") +
  geom_point() + 
  scale_color_viridis(discrete = TRUE, option = "F", begin = 0, end = 0.8) +
  theme_bw() + 
  scale_y_log10() +
  # 添加实心上三角标注
  geom_point(
    data = dose_times,
    aes(x = Time, y = Concentration),
    shape = 17,  # shape=17为实心上三角,shape=2为空心上三角,可按需替换
    size = 4,    # 调整三角形大小
    color = "black",  # 统一设置三角形颜色
    inherit.aes = FALSE  # 不继承主图的颜色映射
  )

替代方案:用Unicode三角形符号

如果需要更灵活的样式,也可以用geom_text()直接添加Unicode三角符号:

ggplot(data = df, aes(x = Time, y = Concentration, col = Species)) +
  # 原绘图代码...
  scale_y_log10() +
  geom_text(
    data = dose_times,
    aes(x = Time, y = Concentration, label = "△"),
    size = 6,
    color = "black",
    inherit.aes = FALSE
  )

内容的提问来源于stack exchange,提问作者AsGi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 23:05:17