首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么geom_pattern=梯度没有在RMarkdown子页中分割数字?

为什么geom_pattern=梯度没有在RMarkdown子页中分割数字?
EN

Stack Overflow用户
提问于 2021-04-28 12:23:49
回答 2查看 92关注 0票数 0

我想在我的.Rmd文档中自动生成页面。我没有办法做这件事,但我终于找到了一个可以接受的选择(https://somtom.github.io/post/using-dynamically-rendered-r-markdown-childs-for-reports/)。

这个例子一切都很好,但是当我修改它以介绍我的数据时,会出现一些问题。(一些数字未出现在最后文件中)。几个小时后,我发现唯一的问题出现在我试图绘制一个包含pattern=gradient的ggplot时。在这个链接(https://somtom.github.io/post/using-dynamically-rendered-r-markdown-childs-for-reports/)中,您可以找到原始代码。

在这里,您可以找到相同的代码,包括仅在子页面代码中进行的小修改:我用一些随机图形(包括梯度模式)替换了原始代码中的图形。

请注意我放了一些。在块‘之前,为了被识别为单个块代码(您必须删除它们才能运行代码)。

我研究了html代码,发现这个图形绘制得很好,但是它没有出现在相应的图表中。没有渐变的任何其他图形看起来都是正常的。

代码语言:javascript
复制
---
title: "Example Analytics"
output: 
  flexdashboard::flex_dashboard:
    orientation: rows
    vertical_layout: fill
---
# Overview

`r shiny::tags$h1("Overview", style="text-align:center")`

.```{r setup, include=FALSE}
library(flexdashboard) 
library(tidyverse)

# Create dummy data for example
set.seed(345)
date_start <- as.Date("2018-01-01")
product_groups <- c("PG1", "PG2", "PG3")
products <- list(
  PG1 = c("A", "B", "C"),
  PG2 = c("D", "E", "F"),
  PG3 = c("G", "H")
)
data <- data.frame(
  product_group = sample(product_groups, 100, replace = T),
  trade_volume = rnorm(100, mean = 3448, sd = 200),
  date = date_start + 1:100
) %>% 
  group_by(id = row_number()) %>% 
  mutate(product = sample(unlist(products[[product_group]]), 1, replace = TRUE)) %>% 
  ungroup()
.```


Row
-----------------------------------------------------------------------

### Trade Volume Development

.```{r fig.width=15, fig.height=5}
data %>% 
  group_by(date) %>% 
  summarise(trade_volume = sum(trade_volume)) %>% 
  ggplot() +
  geom_line(aes(x = date, y = trade_volume), 
           color = "#2780e3",
           alpha = 0.8) +
  scale_y_continuous(labels = scales::dollar) +
  theme_minimal() +
  ylab("Trade Volume") +
  xlab("Date")
.```


Row
-----------------------------------------------------------------------

### Product Group Share on Trade Volume

.```{r}
data %>% 
  group_by(product_group) %>% 
  summarise(trade_volume = sum(trade_volume)) %>%
  mutate(trade_volume_share = trade_volume / sum(trade_volume)) %>% 
  ggplot() +
  geom_col(aes(x = reorder(product_group, -trade_volume_share), y = trade_volume_share), 
           fill = "#2780e3",
           alpha = 0.8) +
  scale_y_continuous(labels = scales::percent) +
  theme_minimal() +
  ylab("Share on Trade Volume") +
  xlab("Product Group")
.```

### Product Group Share on Order Count

.```{r}
data %>% 
  group_by(product_group) %>% 
  summarise(order_count = n()) %>% 
  mutate(order_count_share = order_count / sum(order_count)) %>% 
  ggplot() +
  geom_col(aes(x = reorder(product_group, -order_count_share), y = order_count_share), 
           fill = "#2780e3",
           alpha = 0.8) +
  scale_y_continuous(labels = scales::percent) +
  theme_minimal() +
  ylab("Share on Order Count") +
  xlab("Product Group")
.```

.```{r render subpages, include=FALSE}
# Get all unique product groups for the subpages
product_groups <- unique(data$product_group)

# Create variable which stores all subpages outputs
out = NULL

# Set knitr options to allow duplicate labels (needed for the subpages)
options(knitr.duplicate.label = 'allow')

# Create temporary environment which we use for knitting subpages.RMD 
subpage_env <- new.env()

for (pg in product_groups) {
  # Filter data for product group 
  subpage_data <- data %>% 
    filter(product_group == pg)
  
  # Assign filtered data and product group to subpage_env 
  assign("subpage_data", subpage_data, subpage_env)
  assign("product_group", pg, subpage_env)
  
  # Knit subpage.RMD using the subpage_env and add result to out vector
  out = c(out, knitr::knit_child('subpage.RMD', envir = subpage_env))
}
.```

`r paste(knitr::knit_child(text = out), collapse = '')`
代码语言:javascript
复制
`r paste0('# ', product_group, '{data-navmenu="Product Groups"}')`

`r shiny::tags$h1(product_group, style="text-align:center")`

Row
-----------------------------------------------------------------------

### Product Share on Trade Volume

.```{r fig.width=10}
#------------------------------------------! MODIFICATION INCLUDING GRADIENT PLOT-------------------------------------
df <- data.frame(
  trt         = c("a", "b", "c"),
  outcome     = c(2.3, 1.9, 3.2)
)

ggplot(df, aes(trt, outcome)) +
  geom_col_pattern(
    aes(
      pattern_fill        = trt,
      pattern_orientation = trt
    ),
    pattern       = 'gradient',
    pattern_fill2 = 'white',
    colour        = 'black'
  ) +
  theme_bw(15) +
  labs(
    title    = "ggpattern::geom_col_pattern()",
    subtitle = "pattern = 'gradient'"
  ) +
  theme(
    legend.key.size = unit(1.5, 'cm')
  ) +
  coord_fixed(ratio = 1/2)
.```


### Products with Most Trade Volume

.```{r}
subpage_data %>% 
  group_by(Product = product) %>% 
  summarise(`Trade Volume [€]` = sum(trade_volume)) %>% 
  arrange(-`Trade Volume [€]`) %>% 
  knitr::kable()
.```
EN

回答 2

Stack Overflow用户

发布于 2021-04-29 11:20:39

geom_col_patternggpattern 套餐的一部分--它不在ggplot2(tidyverse)中,您需要将包添加到您的文件中,如果您希望该函数工作的话。在您的问题中,您问了关于geom_pattern的问题,但是看起来这个函数实际上是geom_col_pattern()ggpattern::geom_col_pattern()

票数 0
EN

Stack Overflow用户

发布于 2021-12-05 16:43:50

尝试使用{ggpattern}. 这解决了另一个用户的类似问题。显式禁用R4.1梯度支持。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67300194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档