如何用rAmCharts绘制带拟合值上下置信区间的散点图?
我帮你补全并优化了rAmCharts的实现代码,直接运行就能得到带趋势线和预测置信区间的散点图。先看完整的可运行示例:
完整代码
# 加载依赖包 library(rAmCharts) # 生成数据并计算预测区间 set.seed(123) # 设置种子保证结果可复现 Data = data.frame(ax = rnorm(50), ay = rnorm(50)) # 拟合无截距线性模型并计算预测区间 pred_results = predict(lm(ay ~ ax - 1, data = Data), newdata = Data, interval = 'prediction') Data = cbind(Data, pred_results) # 按X轴排序,保证线条绘制连贯 Data = Data[order(Data$ax), , drop = FALSE] # 创建并配置XY图表 amChart_Plot = amXYChart( dataProvider = Data, categoryField = "ax", startDuration = 0, theme = "light" ) %>% # 添加原始散点系列 addAmSeries( valueField = "ay", type = "scatter", title = "原始数据", bullet = "circle", bulletSize = 6, lineAlpha = 0 # 散点不需要连线 ) %>% # 添加趋势线(拟合值) addAmSeries( valueField = "fit", type = "line", title = "趋势线", lineColor = "#2E86AB", lineThickness = 2, bullet = NULL # 趋势线隐藏数据点 ) %>% # 添加置信区间上限 addAmSeries( valueField = "upr", type = "line", title = "置信区间上限", lineColor = "#F24C4C", lineAlpha = 0.6, lineDashLength = 3, bullet = NULL ) %>% # 添加置信区间下限 addAmSeries( valueField = "lwr", type = "line", title = "置信区间下限", lineColor = "#F24C4C", lineAlpha = 0.6, lineDashLength = 3, bullet = NULL ) %>% # 配置X轴 addAxis( type = "value", position = "bottom", title = "X轴 (ax)", gridAlpha = 0.3 ) %>% # 配置Y轴 addAxis( type = "value", position = "left", title = "Y轴 (ay)", gridAlpha = 0.3 ) %>% # 启用图例 setLegend(enabled = TRUE) %>% # 配置共享Tooltip setTooltip( enabled = TRUE, shared = TRUE # 鼠标hover时显示所有系列对应值 ) # 渲染图表 print(amChart_Plot)
关键细节说明
- 我给数据处理加了
set.seed(123),这样你每次运行的结果都一致,方便调试;同时简化了线性模型的写法,用data参数指定数据集,代码更规范。 - 核心是通过
addAmSeries分别添加四个系列:原始散点、趋势线、置信区间上下限。散点系列用scatter类型并关闭连线,趋势线和置信区间用line类型,置信区间用虚线+半透明效果和趋势线区分开。 - 必须按X轴排序:你原来的代码已经做了这一步,这非常重要——如果数据无序,置信区间的线会变成混乱的折线,排序后才能画出平滑的区间范围。
- 开启
shared = TRUE的Tooltip,鼠标悬停时能同时看到对应X值的原始数据、拟合值和置信区间上下限,方便对比查看。
内容的提问来源于stack exchange,提问作者Bogaso
相关产品推荐
相关产品推荐

