【问题标题】:R pie chart in rmarkdown docxrmarkdown docx中的R饼图
【发布时间】:2025-12-20 09:05:16
【问题描述】:

我有一个数据,想在Rmarkdown word_document 中创建一个饼图。
这是我的数据:

dt <- data.table::fread("
        TravelArea DayCounts  
            Others     98254  
             China    298705 
               USA     39048  
         SouthAsia    127046  
            Europe    114529  
        MIDAmerica      4270  
               AUS     21917 
            ENAsia    361727 
             Local   1819977 
            Africa      2473  
 AsiaPacificIsland      2943 
            ESAsia     25208  ")

我在Rmarkdown 的代码是:

```{r echo=FALSE, message=FALSE, warning=FALSE}
plotly::plot_ly(dt, labels = ~ TravelArea, values = ~ DayCounts, type = 'pie', 
                 textposition = 'inside', 
                 textinfo = 'label+percent', 
                 insidetextfont = list(color = '#FFFFFF'), 
                 hoverinfo = 'text', 
                 text = ~paste(TravelArea, DayCounts),
                 marker = list(colors = colors,                                                                                                                               line = list(color = '#FFFFFF', width = 1)),
                 showlegend = T) %>%
    layout(title = 'Figure C.1.1',
           xaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
           yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE))
```

但是,这不能输出到docx。如何创建可以正确输出并呈现到 word_document 的饼图。

【问题讨论】:

  • pie(dt$DayCounts, labels=dt$TravelArea)? (它需要一点美化,但它的功能。)
  • 我知道pie()函数。但是不能美化吧?
  • 不多,但它似乎并没有太大的受欢迎程度来证明改进的合理性。甚至帮助页面也建议不要使用它,并说 “饼图是一种非常糟糕的信息显示方式。眼睛擅长判断线性度量,不擅长判断相对区域。条形图或点状图是一种更可取的方式显示这种类型的数据。”(我还没有发现饼图比欺骗眼睛更好的情况,但这是我的观点。)
  • 是这个问题吗a)您可以在 r 控制台中打印您想要的图表,但您不能将 rmarkdown 文件编织到 docx,b)您根本无法创建饼图,或者c) 不能把饼图吐出来自己粘贴到word里吗?
  • 使用这个包创建漂亮的饼图,包括 jpeg 背景:cloud.r-project.org/web/packages/patternplot/vignettes/… [nah just don't]

标签: r r-markdown pie-chart docx


【解决方案1】:

您可以尝试此链接上给出的解决方案: Plotly as png in knitr/rmarkdown

---
title: "Plot"
output: word_document
---

```{r echo=FALSE, message=FALSE}
library(plotly)

dt <- data.table::fread("
         TravelArea DayCounts  
             Others     98254  
              China    298705 
                USA     39048  
          SouthAsia    127046  
             Europe    114529  
         MIDAmerica      4270  
                AUS     21917 
             ENAsia    361727 
              Local   1819977 
             Africa      2473  
  AsiaPacificIsland      2943 
             ESAsia     25208  ")



p <- plot_ly(dt, labels = ~ TravelArea, values = ~ DayCounts, type = 'pie', 
             textposition = 'inside', 
             textinfo = 'label+percent', 
             insidetextfont = list(color = '#FFFFFF'), 
             hoverinfo = 'text', 
             text = ~paste(TravelArea, DayCounts),
             marker = list(colors = colors,                                                                
             line = list(color = '#FFFFFF', width = 1)),
             showlegend = T)  %>%
             layout(title = 'Figure C.1.1',
             xaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
             yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE))

tmpFile <- tempfile(fileext = ".png")
export(p, file = tmpFile)

```

【讨论】: