DiagrammeR包技术咨询:如何在Rmarkdown中仅输出图表而非代码
解决方案
一、在Rmarkdown里正常渲染图表(不显示原始代码)
推荐两种更靠谱的方法:
方法1:直接用mermaid代码块
不用DiagrammeR包,把你的流程图代码直接放进mermaid代码块里,Rmarkdown会自动渲染成图表,完全不会显示原始代码:
graph LR;A(GPS data)-->C{Analytic data}; B[Weather data]-->C{Analytic data}; D[Masking mandatory/compliance]-->C{Analytic data}; E[Demographics]-->C{Analytic data}; F[Covid-testing result]-->C{Analytic data}; G[Covid confirmed cases]-->C{Analytic data}; C{Analytic data}-->M[Modeling]; M[Modeling]-->V[Data visualization] style A fill:#E5E25F; style B fill:#87AB51; style C fill:#3C8937; style D fill:#23772C; style E fill:#B6E6E6; style F fill:#E5E25F; style G fill:#87AB51; style M fill:#3C8937; style V fill:#23772C;
方法2:调整R代码块选项(保留DiagrammeR调用)
如果一定要用DiagrammeR,除了加echo=F,还要给代码块加上results='asis'选项,确保输出直接渲染成图表:
```{r, echo=F, results='asis'} covid <- "graph LR;A(GPS data)-->C{Analytic data}; B[Weather data]-->C{Analytic data}; D[Masking mandatory/compliance]-->C{Analytic data}; E[Demographics]-->C{Analytic data}; F[Covid-testing result]-->C{Analytic data}; G[Covid confirmed cases]-->C{Analytic data}; C{Analytic data}-->M[Modeling]; M[Modeling]-->V[Data visualization] style A fill:#E5E25F; style B fill:#87AB51; style C fill:#3C8937; style D fill:#23772C; style E fill:#B6E6E6; style F fill:#E5E25F; style G fill:#87AB51; style M fill:#3C8937; style V fill:#23772C; " DiagrammeR::mermaid(covid)
## 二、导出为PNG图片 有两种工具链可以实现: ### 工具链1:用webshot2转换 先装依赖包,再生成并导出: ```r # 安装包 install.packages(c("DiagrammeR", "webshot2")) webshot2::install_phantomjs() # 没装phantomjs的话执行这句 # 生成并导出 library(DiagrammeR) library(webshot2) covid <- "graph LR;A(GPS data)-->C{Analytic data}; B[Weather data]-->C{Analytic data}; D[Masking mandatory/compliance]-->C{Analytic data}; E[Demographics]-->C{Analytic data}; F[Covid-testing result]-->C{Analytic data}; G[Covid confirmed cases]-->C{Analytic data}; C{Analytic data}-->M[Modeling]; M[Modeling]-->V[Data visualization] style A fill:#E5E25F; style B fill:#87AB51; style C fill:#3C8937; style D fill:#23772C; style E fill:#B6E6E6; style F fill:#E5E25F; style G fill:#87AB51; style M fill:#3C8937; style V fill:#23772C; " # 生成图表对象 covid_graph <- mermaid(covid) # 存为临时HTML html_temp <- tempfile(fileext = ".html") saveWidget(covid_graph, html_temp) # 转成PNG保存 webshot(html_temp, "covid_flowchart.png", vwidth = 800, vheight = 600)
工具链2:用DiagrammeRsvg+rsvg转换
通过SVG中转导出PNG:
# 安装包 install.packages(c("DiagrammeR", "DiagrammeRsvg", "rsvg")) # 生成并导出 library(DiagrammeR) library(DiagrammeRsvg) library(rsvg) covid <- "graph LR;A(GPS data)-->C{Analytic data}; B[Weather data]-->C{Analytic data}; D[Masking mandatory/compliance]-->C{Analytic data}; E[Demographics]-->C{Analytic data}; F[Covid-testing result]-->C{Analytic data}; G[Covid confirmed cases]-->C{Analytic data}; C{Analytic data}-->M[Modeling]; M[Modeling]-->V[Data visualization] style A fill:#E5E25F; style B fill:#87AB51; style C fill:#3C8937; style D fill:#23772C; style E fill:#B6E6E6; style F fill:#E5E25F; style G fill:#87AB51; style M fill:#3C8937; style V fill:#23772C; " # 导出为SVG字符串 svg_str <- export_svg(mermaid(covid)) # 转成PNG保存 writeBin(rsvg_png(charToRaw(svg_str)), "covid_flowchart.png")
内容的提问来源于stack exchange,提问作者ponyhd
相关产品推荐
相关产品推荐

