当使用 创建非常高的水平条形图时ggplot2,使用该包呈现的图reprex会截断一些数据,而轴标签仍保留在正确的位置。这与相同代码的 ggplot 输出不同。
reprex输出:
library(babynames)
library(dplyr)
library(ggplot2)
data("babynames")
bn <- babynames %>%
filter(year == 2015) %>%
arrange(-n) %>%
head(400) %>%
mutate(highlight = ifelse(n>12000, TRUE, FALSE)) %>%
arrange(name)
breaks <- bn %>% filter(highlight == TRUE) %>% pull(name)
ggplot(bn, aes(x=name, y=n, fill=highlight)) +
geom_col() +
scale_x_discrete(breaks = breaks)+
coord_flip() +
theme_classic()
Run Code Online (Sandbox Code Playgroud)

由reprex 包(v0.2.1)于 2018-09-19 创建
用于ggsave()保存 png 并将其上传到 stackoverflow:
ggsave("long_example.png",
width = 4,
height = 6,
dpi=200)
Run Code Online (Sandbox Code Playgroud)
在该ggsave()版本中,阿比盖尔的突出显示栏正确显示,而底部的几个栏(包括阿比盖尔的栏)在 reprex 版本中消失了。这里发生了什么?
正如尼克·拉森(Nick Larsen)指出的那样,问题不在于图中的底部栏被删除了;而在于底部栏被从图中删除了。当图像尺寸和分辨率设置为默认值时,图表中的一些条形图不会被渲染。这种行为的必要性是鸽巢原理的一个明显例子(如果我的条形图是鸽子,像素是洞)。在底层reprex使用来创建 markdown 输出,并提供一种语法来通过 markdown块选项修改这些限制性默认值(请参阅此处的更多 reprex 示例):knitr
reprex({
#+ setup, include = FALSE
knitr::opts_chunk$set(fig.width = 4, fig.height = 6, dpi = 200, warning = FALSE)
#+ actual-reprex-code
#{INSERT CODE HERE}
}, venue = 'so')
Run Code Online (Sandbox Code Playgroud)
使用上面定义的图形选项,我的图形将有 1200 像素的垂直空间,足以轻松容纳 400 个条形图和周围的图表区域。将问题中的示例代码替换为{INSERT CODE HERE},我们得到应用了代码块选项的所需reprex输出:knitr
library(babynames)
library(dplyr)
library(ggplot2)
data("babynames")
bn <- babynames %>%
filter(year == 2015) %>%
arrange(-n) %>%
head(400) %>%
mutate(highlight = ifelse(n > 12000, TRUE, FALSE)) %>%
arrange(name)
breaks <- bn %>% filter(highlight == TRUE) %>% pull(name)
ggplot(bn, aes(x = name, y = n, fill = highlight)) +
geom_col() +
scale_x_discrete(breaks = breaks)+
coord_flip() +
theme_classic()
Run Code Online (Sandbox Code Playgroud)

由reprex 包(v0.2.1)于 2018-09-21 创建