在 ggplot2 条形图中突出显示与个人特定 PDF 报告相对应的单个条形图

Highlight individual bar in ggplot2 bar chart that corresponds to an individual's specific PDF report

抱歉标题不好,我不确定如何最好地表达我的问题所在。

为了提供一些背景信息,我想使用 Rmarkdown 为我们组织中的每个提供商创建一个个性化记分卡。我已经想出如何为每个提供者创建一个单独的 PDF;但是,我想在每个人的报告中有一个简单的条形图,突出显示提供者的位置,以便他们可以将自己与同行进行比较。以下是我目前所拥有的:

首先我创建了数据集:

############################## Create dataset and export #####################################
df = data.frame(
  "Provider" = c("A","B","C","D"),
  "Measure" = c(1.2,0.8,1.7,0.4)
)
write.csv(df, "pathway/df.csv")

接下来我创建了一个名为 "TEST" 的 Rmarkdown 文件,它调用数据集并包含一个图表

###################### Create Rmarkdown file named "TEST" ####################################
---
  output: pdf_document
---

```{r echo=FALSE}
df <- read.csv("pathway/df.csv", stringsAsFactors = FALSE)
name <- df$Provider[i]

Dear `r name`,

This is your personalized scorecard.

```{r} 
ggplot() +
  geom_bar(data=df, aes(x=reorder(Provider, -Measure), y=Measure,
                        fill = factor(ifelse(Provider == "A", "You","Your Peers"))), 
           stat = "identity") +
  scale_fill_manual(name = "Provider", values=c("steelblue","lightgrey"))

最后我用 for-loop 创建了一个 R 文件来创建与提供者一样多的 PDF

################ Run R file with loop to make separate PDFs per Provider #####################
library(knitr)
library(rmarkdown)

#Read data
df <- read.csv("pathway/df.csv", stringsAsFactors = FALSE)

#Create loop
for (i in 1:nrow(df)){
  rmarkdown::render(input = "pathway/TEST.Rmd",
                    output_format = "pdf_document",
                    output_file = paste("handout_", i, ".pdf", sep=''),
                    output_dir = "pathway/folder/")
}

在上面的 ggplot2 图表代码中,我手动编码提供者 "A" 以蓝色突出显示,其余提供者为灰色,但我们有 30 多个提供者,我不想手动编码为每一个。如果 Rmarkdown 有某种方法可以自动以蓝色突出显示每个提供商,并为他们的每个 PDF 报告以灰色突出显示其余部分,那将是惊人的。非常感谢任何帮助!

你的代码中有一些错误,所以我在这里给出了正确的文件。

RMD 文件:

您必须提交参数,在您的情况下 i。您也在 name <- df$Provider[i] 中执行了此操作,但未给出 i。您还必须加载 ggplot2 并将您的块设置为正确的位置。

---
output: pdf_document
params:
  i: 1
---

```{r echo=FALSE}
library(ggplot2)
df <- read.csv("df.csv", stringsAsFactors = FALSE)
name <- df$Provider[i]
```

Dear `r name`,

This is your personalized scorecard.

```{r} 
ggplot() +
  geom_bar(data=df, aes(x=reorder(Provider, -Measure), y=Measure,
                    fill = factor(ifelse(Provider == df$Provider[i], "You","Your Peers"))), 
       stat = "identity") +
  scale_fill_manual(name = "Provider", values=c("steelblue","lightgrey"))
```

R 文件循环

这里你也必须提交参数。

library(knitr)
library(rmarkdown)

#Read data
df <- read.csv("pathway/df.csv", stringsAsFactors = FALSE)

#Create loop
for (i in 1:nrow(df)){
  rmarkdown::render(input = "pathway/TEST.Rmd",
                    output_format = "pdf_document",
                    output_file = paste("handout_", i, ".pdf", sep=''),
                    output_dir = "pathway/folder/",
                    params = list(i = i)))}