R reprex无法为非常高的图提供正确的ggplot输出

时间:2018-09-20 01:23:23

标签: r ggplot2 reprex

当使用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)

bar for Abigail is now showing

ggsave()版本中,高亮显示的Abigail栏正确显示,而底部的几行(包括Abigail的)在reprex版本中消失了。这是怎么回事?

1 个答案:

答案 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创建