RMarkdown转HTML仅渲染单个Plotly交互式图表问题咨询
解决R Markdown中Plotly多图表仅渲染一个的问题
我明白你遇到的困扰了——在R Markdown里依次创建了曲面图、加单个标记点的图、加两个标记点的图,但转换为HTML后只显示最后一个交互式图表。这主要是R Markdown代码块的默认规则导致的:单个代码块里只会输出最后一个对象。下面给你几种针对性的解决办法:
方法1:拆分到独立代码块
把每个图表的生成和输出放在单独的R代码块中,这样每个代码块的结果都会被渲染出来:
# 绘制基础曲面图 p1 <- plot_ly() %>% add_surface(z=z, x=wRange, y=yRange) %>% layout(showlegend=FALSE, scene=list(xaxis=list(title="wMult"), yaxis=list(title="yMult"), zaxis=list(title="MAE"))) p1
# 给曲面添加第一个标记点 p2 <- p1 %>% add_markers(z=MAE1, x=wMult1, y=yMult1) %>% layout(showlegend=FALSE) p2
# 再添加第二个标记点 p3 <- p2 %>% add_markers(z=MAE2, x=wMult2, y=yMult2) %>% # 补全你之前未写完的参数 layout(showlegend=FALSE) p3
方法2:用tagList在单个代码块输出多图表
如果不想拆分代码块,可以用htmltools::tagList()把三个Plotly对象包裹起来,这样R Markdown会依次渲染所有图表:
# 生成三个图表对象 p1 <- plot_ly() %>% add_surface(z=z, x=wRange, y=yRange) %>% layout(showlegend=FALSE, scene=list(xaxis=list(title="wMult"), yaxis=list(title="yMult"), zaxis=list(title="MAE"))) p2 <- p1 %>% add_markers(z=MAE1, x=wMult1, y=yMult1) %>% layout(showlegend=FALSE) p3 <- p2 %>% add_markers(z=MAE2, x=wMult2, y=yMult2) %>% layout(showlegend=FALSE) # 一次性输出所有图表 htmltools::tagList(p1, p2, p3)
额外提示:如果只想在同一个图里显示两个标记点
如果你其实是要在同一张曲面图里同时展示两个标记点(而非生成三张独立图表),那你的p3代码逻辑是对的,只要补全参数即可。另外可以给两个标记点设置不同样式,方便区分:
p3 <- p2 %>% add_markers(z=MAE2, x=wMult2, y=yMult2, marker=list(color="firebrick", size=8)) %>% # 和第一个点区分开 layout(showlegend=FALSE) p3
这样生成的p3会包含曲面+两个不同样式的标记点,转换为HTML后就能看到完整的交互式图表了。
内容的提问来源于stack exchange,提问作者B.Bees
相关产品推荐
相关产品推荐

