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

如何在Plotly中为实验与理论数据设置不同绘图模式?

解决Plotly R中不同数据集设置不同绘图模式的问题

原代码将实验与理论数据合并后统一绘图,无法分别指定markers(实验数据)和lines(理论数据)模式。解决思路是分别添加绘图轨迹(trace),为不同类型的数据单独设置模式,同时保证同化学物质的颜色一致。

修改后的完整代码

library(plotly)
library(colorBlindness)

# 实验数据:保持原结构
experimentaldata <- data.frame(
  hours = c(1,2,3,4,5,6,7,8,9),
  concentration = c(0.25, 0.3, 0.8, 0.75, 0.3, 0.1, 0.9, 0.98, 1),
  name = c("Chloride", "Chloride", "Chloride", "Sulfate", "Sulfate", "Sulfate", "Bicarbonate", "Bicarbonate", "Bicarbonate")
)

# 理论数据:调整name与实验数据对应,保证颜色一致
theoreticaldata <- data.frame(
  hours = c(1, 3, 5, 7, 9),
  concentration = c(0.45, 0.38, 0.27, 0.8, 0.66),
  name = c("Chloride", "Chloride", "Chloride", "Sulfate", "Sulfate")
)

# 初始化绘图,先添加实验数据(markers模式)
fig <- plot_ly() %>%
  add_trace(
    data = experimentaldata,
    x = ~hours, y = ~concentration,
    type = 'scatter', mode = 'markers',
    color = ~name, colors = SteppedSequential5Steps,
    name = ~paste(name, "(实验)")
  )

# 添加理论数据(lines模式)
fig <- fig %>%
  add_trace(
    data = theoreticaldata,
    x = ~hours, y = ~concentration,
    type = 'scatter', mode = 'lines',
    color = ~name, colors = SteppedSequential5Steps,
    name = ~paste(name, "(理论)")
  )

print(fig)

关键说明

  • 不合并数据集,通过add_trace()分别添加两类数据,每个轨迹独立设置mode参数。
  • 调整理论数据的name字段与实验数据一致,确保同化学物质的实验、理论数据使用相同颜色。
  • 通过name参数自定义图例名称,区分实验与理论数据。

如果需要批量处理多个分组(避免重复编写add_trace),可以用循环实现:

fig <- plot_ly()

# 批量添加实验数据
for (chem in unique(experimentaldata$name)) {
  sub_data <- subset(experimentaldata, name == chem)
  fig <- fig %>%
    add_trace(
      data = sub_data, x = ~hours, y = ~concentration,
      type = 'scatter', mode = 'markers',
      color = I(SteppedSequential5Steps[match(chem, unique(experimentaldata$name))]),
      name = paste(chem, "(实验)")
    )
}

# 批量添加理论数据
for (chem in unique(theoreticaldata$name)) {
  sub_data <- subset(theoreticaldata, name == chem)
  fig <- fig %>%
    add_trace(
      data = sub_data, x = ~hours, y = ~concentration,
      type = 'scatter', mode = 'lines',
      color = I(SteppedSequential5Steps[match(chem, unique(experimentaldata$name))]),
      name = paste(chem, "(理论)")
    )
}

print(fig)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 15:07:31