R представляет не отображать правильный вывод ggplot для очень высоких графиков - PullRequest
0 голосов
/ 20 сентября 2018

При создании очень высоких горизонтальных линейных диаграмм с помощью ggplot2 график, отображаемый при использовании пакета reprex, обрезает некоторые данные, в то время как метки осей остаются в правильных положениях.Это не то же самое поведение, что и вывод ggplot для того же кода.

reprex output:

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()

Создано в 2018 году-09-19 представьте пакет (v0.2.1)

Использование ggsave() для сохранения png и загрузки его в stackoverflow:

ggsave("long_example.png",
       width = 4,
       height = 6,
       dpi=200)

bar for Abigail is now showing

В версии ggsave() подсвеченная полоса для Abigail отображается правильно, в то время как несколько нижних полос, включая Abigail, исчезли в представленной версии.Что здесь происходит?

1 Ответ

0 голосов
/ 21 сентября 2018

Как отметил Ник Ларсен, проблема не в том, что нижние полосы выпадают с фигуры;это то, что некоторые столбцы на графике не отображаются, когда размеры и разрешение изображения установлены по умолчанию.Необходимость такого поведения является очевидным примером принципа голубиных отверстий (если мои столбцы были голубями, а пиксели - отверстиями).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')

Если параметры фигуры определены выше, для моей фигуры будет 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()

Создано в 2018-09-21 пакетом Представить (v0.2.1)

...