当使用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()
由reprex package(v0.2.1)于2018-09-19创建
使用ggsave()
保存png并将其上传到stackoverflow:
ggsave("long_example.png",
width = 4,
height = 6,
dpi=200)
在ggsave()
版本中,高亮显示的Abigail栏正确显示,而底部的几行(包括Abigail的)在reprex版本中消失了。这是怎么回事?
答案 0 :(得分:1)
正如尼克·拉尔森(Nick Larsen)所指出的那样,问题不在于底线是否从图中掉下;这是图表中的一些条形图,当图像尺寸和分辨率设置为默认值时不会呈现。这种行为的必要性是pigeonhole principle的一个明显示例(如果我的条形是鸽子,而像素是孔)。 reprex
在后台使用knitr
创建markdown输出,并提供了一种通过markdown chunk options修改这些限制性默认值的语法(请参见更多reprex示例here):>
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')
使用上述定义的图形选项,图形的垂直空间将为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()
由reprex package(v0.2.1)于2018-09-21创建