Как правильно разместить график в редакторе rmarkdown и связанном html-документе?

#r #ggplot2 #r-markdown #visualization

#r #ggplot2 #r-markdown #визуализация

Вопрос:

Я создаю некоторые графики, которые имеют некоторые проблемы с выравниванием в редакторе rmarkdown и HTML-документах.

График не выравнивается по центру даже при использовании fig.align='center' , а также вырезается по краям (PS на прикрепленном изображении: названия стран вырезаны с левой стороны).

Как я могу прокручивать диаграмму по оси x, а не вырезать или уменьшать, поскольку это делает ее нечитаемой.

Например, диаграммы на этой веб-странице прокручиваются, а не уменьшаются: https://cran.r-project.org/web/packages/gapminder/README.html

Использование настроек фрагмента показано на рисунке ниже:
введите описание изображения здесь

Я также использовал эти настройки фрагмента:

knitr::opts_chunk$set(echo = TRUE, message = FALSE, warning = FALSE, dpi = 300, cache = FALSE, attr.output='style="max-height: 300px;"')

Проблема вырезания названий стран показана на рисунке ниже
введите описание изображения здесь

Код для ссылки.

 library(tidyverse)

gapminder <- read.csv("https://raw.githubusercontent.com/swcarpentry/r-novice-gapminder/gh-pages/_episodes_rmd/data/gapminder-FiveYearData.csv")

gapminder <- gapminder %>% mutate_if(is.character, as.factor)

gapminder_gdpPercap_diff  <- gapminder %>% 
                              filter(year %in% c(1952,2007)) %>% 
                              
                              # filter(country %in% c("India","Vietnam")) %>% 
                              
                              arrange(country, year) %>% 
                              
                              group_by(country) %>% 
                              
                              mutate(gdpPercap_diff = gdpPercap[2] - gdpPercap[1],
                                     max_pop = max(pop)) %>% 
                              
                              ungroup() %>% 
                              
                              arrange(gdpPercap_diff) %>% 
                              
                              filter(max_pop > 30000000) %>% 
                              
                              mutate(country = droplevels(country)) %>% 
                              select(country, year, continent, gdpPercap, gdpPercap_diff)

gapminder_gdpPercap_diff %>% 
  mutate(country = fct_inorder(country)) %>% 
  
  group_by(country) %>% 
  
  mutate(max_gdpPercap = max(gdpPercap),
         min_gdpPercap = min(gdpPercap)) %>% 
  
  ungroup() %>% 

 # plotting begins
  ggplot()  
  geom_segment(aes(x = min_gdpPercap, xend = max_gdpPercap,
                   y = country, yend = country,
                   col = continent), alpha = 0.5, size = 7)  
  
  geom_point(aes(x = gdpPercap, y = country, col = continent), size = 8, alpha = .8)  
  
  geom_text(aes(x = min_gdpPercap   10, y = country,
                label = paste(country, round(min_gdpPercap))),
            col = "grey50", hjust = "right")  
  
  geom_text(aes(x = max_gdpPercap - 8.0, y = country,
                label = round(max_gdpPercap)),
            col = "grey50", hjust = "left")  
  
  # scale_x_continuous(limits = c(20,85))  
  
  scale_color_brewer(palette = "Pastel2")  
  
  labs(title = "Change in GDP Per Capita",
       subtitle = "Between years 1952 and 2007",
       col = "Continent")  
  
  # background amp; theme settings
  theme_classic()  
  
  theme(legend.position = "top", 
        axis.line = element_blank(),
        axis.ticks = element_blank(),
        axis.text = element_blank()
        )

  

Если я добавлю scale_x_continuous(limits = c(-1000,35000)) , как предложено в ответах, диаграмма станет слишком маленькой для чтения названий стран и цифр (см. Изображение ниже). Я бы хотел, чтобы диаграмма была читаемой, даже если у меня есть прокрутка для этого.

введите описание изображения здесь

Комментарии:

1. Вот код Rmd из ссылки, которую вы разместили github.com/jennybc/gapminder/blob/master/README.Rmd

2. Я проверил их код, но, похоже, они не используют какие-либо другие параметры фрагмента, которые имеют значение. Я также пробовал, out.width = "100%" но это тоже не помогло

Ответ №1:

Вы делаете new scale_x_continuous, но используете expand вместо limits, scale_x_continuous(expand = expansion(mult = c(.25))) сработало для меня.

Комментарии:

1. Большое спасибо @Kat. Это именно то, что я искал!!

Ответ №2:

Вы очень близки к тому, что хотели. scale_x_continuous можно настроить вручную, чтобы справиться с видимостью. Вы прокомментировали это в своем коде.

Попробуйте scale_x_continuous(limits = c(-5000,40000)) , и вы сможете скорректировать его в зависимости от вашего удовлетворения.

Комментарии:

1. диаграмма scaling_x_continuous() выглядит настолько маленькой, что названия и цифры стран становятся нечитаемыми, что я могу исправить, увеличив размер шрифта, но это заставит их перекрываться. Думаю, я предпочту диаграмму хорошего размера, которую можно прокручивать и читать. Я добавил изображение результирующей диаграммы для scale_x_continuous().