R Shiny中如何指定响应式对象vectorsAll的列进行原生绘图
问题原因
你当前绘图代码的问题在于:sapply(vectorsAll(), function(x) gsub("%","",x))会对vectorsAll包含的两列(周期列+百分比列)全部做批量处理,最终返回一个长度为120的一维向量,相当于把60个周期值和60个百分比值拼接在一起作为绘图输入,自然会出现61-120位的异常数值。
修复方案
仅需要修改renderPlot部分的代码,单独提取第二列做百分号处理,明确指定绘图的X、Y轴即可,修改后代码如下:
# --- 替换原有的vector plots对应代码块 --- output$graph1 <- renderPlot({ req(vectorsAll()) # 第一列为X轴:周期值 period <- vectorsAll()[,1] # 第二列处理后为Y轴:移除%后转数值类型 yld_rate <- as.numeric(gsub("%", "", vectorsAll()[,2])) # 原生plot绘图,可自定义坐标轴、标题等参数 plot(x = period, y = yld_rate, xlab = "周期", ylab = "收益率(%)", main = "周期-收益率曲线") })
修复效果说明
- 明确拆分两列的使用逻辑:第一列仅作为X轴周期,第二列处理后作为Y轴数值,不会出现数据长度翻倍的问题
- 额外增加
req(vectorsAll())判断,避免数据未加载完成时出现绘图报错 - 保留你要求的仅使用原生Shiny、R基础绘图功能的要求,没有引入任何第三方绘图包
内容的提问来源于stack exchange,提问作者Curious Jorge - user9788072
相关产品推荐
相关产品推荐

