Выделите отдельный столбец в столбчатой ​​диаграмме ggplot2, который соответствует заданному индивидуальному отчету c в формате PDF. - PullRequest
1 голос
/ 10 марта 2020

Извиняюсь за плохое название, я не был уверен, как лучше всего передать мою проблему.

Чтобы дать некоторый контекст, я хочу создать персональную систему показателей для каждого поставщика в нашей организации, используя 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")

Затем я создал файл Rmarkdown с именем "TEST", который вызывает набор данных и включает в себя график * 1008. *

###################### 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"))

Наконец, я создал R-файл с for-l oop, чтобы создать столько 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, который я кодировал вручную провайдер «А» будет выделен синим цветом, а остальные провайдеры - серым, но у нас более 30 провайдеров, и я не хочу вручную кодировать каждого из них. Если у Rmarkdown есть какой-то способ автоматически выделять каждого провайдера синим, а остальные серым цветом для каждого из их отчетов в формате PDF, это было бы замечательно. Любая помощь очень ценится!

1 Ответ

1 голос
/ 10 марта 2020

В вашем коде были некоторые ошибки, поэтому я даю правильные файлы здесь.

Файл 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 l oop

Здесь вы также должны отправить параметр тоже.

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)))}
...