如何抑制R Markdown中Plotly的多余中间图表输出?
R Markdown 中 Plotly 输出多幅中间图的解决方案
问题原因
这个问题确实和reticulate包相关:R Markdown 调用reticulate执行Python代码时,默认会自动打印每一条顶层Python语句的返回值。而Plotly的add_hline、update_layout这类图形配置方法,都会返回修改后的Figure对象,会被reticulate识别为可渲染的可视化对象,因此每执行一步配置就会输出一张中间阶段的图表。
可选用的解决方法
- 方法1:单条配置语句末尾加分号
在Python中语句末尾加;会阻止返回值输出,自然不会触发reticulate的自动渲染逻辑,修改后代码如下:# plotting the bar chart fig = px.bar(df2122, x="DateYear", y="kg", template="plotly_white") fig.add_hline(y=169117.6839, annotation_text="Monthly average 2019/20", annotation_position="top right"); fig.add_hline(y=75584.48002, annotation_text="Monthly average 2020/21", annotation_position="top right"); fig.update_layout(xaxis_title="Date", yaxis_title="kg"); # showing the plot fig.show() - 方法2:链式调用所有配置逻辑
把所有图形配置方法串联起来执行,仅保留一次赋值或最终的show()调用,中间不会产生单独的返回值输出:fig = (px.bar(df2122, x="DateYear", y="kg", template="plotly_white") .add_hline(y=169117.6839, annotation_text="Monthly average 2019/20", annotation_position="top right") .add_hline(y=75584.48002, annotation_text="Monthly average 2020/21", annotation_position="top right") .update_layout(xaxis_title="Date", yaxis_title="kg")) fig.show() - 方法3:将配置语句返回值赋值给哑变量
把配置方法的返回值赋值给Python中约定的无意义哑变量_,避免返回值被自动打印:fig = px.bar(df2122, x="DateYear", y="kg", template="plotly_white") _ = fig.add_hline(y=169117.6839, annotation_text="Monthly average 2019/20", annotation_position="top right") _ = fig.add_hline(y=75584.48002, annotation_text="Monthly average 2020/21", annotation_position="top right") _ = fig.update_layout(xaxis_title="Date", yaxis_title="kg") fig.show() - 方法4:修改代码块图形输出参数
无需修改Python代码,直接在R Markdown的Python代码块头部添加fig.keep='last'参数,指定仅保留最后一个图形输出即可。
内容的提问来源于stack exchange,提问作者danwri
相关产品推荐
相关产品推荐

