如何在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
相关产品推荐
相关产品推荐

