При вязании HTML из файла Rmd точки данных на графике исчезают

Когда я собираю свой Rmd-файл для отчета и распечатываю код, сюжет появляется именно таким, каким я его хочу. Но когда я связываю его с HTML, точки данных на графике исчезают. Кто-нибудь с потенциальной идеей, почему это может быть так?

См. мой фрагмент Rmd ниже:

{r position_per_year, message=FALSE, warning=FALSE, include=FALSE, fig.show='asis'}
# Position reached per year
position_2007 <- gp_2007 %>%
  group_by(location, surname) %>%
  summarise(position = as.numeric(positionText), .groups = "drop") %>%
  ungroup() %>%
  ggplot(aes(
    x = location,
    y = position,
    group = surname,
    color = surname,
  )) +
  geom_point() +
  geom_line() +
  scale_y_reverse(breaks = seq(24, 1), limits = c(24,1)) +
  scale_x_discrete(guide = guide_axis(angle = 90)) +
  xlab("GP Location") +
  ylab("Place reached")

В R-Markdown сюжет появляется через

print(position_2007)

Выглядит следующим образом:

Тогда как когда график отображается в связанном HTML, он выглядит так (точки данных просто исчезают):

Если у кого-то есть идеи о том, в чем может быть проблема, это было бы очень признательно!

Редактировать (по запросу):

Gp_2007 — это следующий фрейм данных:

dput(gp_2007)

Выдает следующий вывод:

structure(list(positionText = c("9", "3", "4", "R", "1", "3", 
"4", "1", "5", "1", "2", "3", "1", "2", "7", "2", "2", "3", "3", 
"3", "1", "2", "5", "7", "1", "1", "2", "3", "2", "2", "R", "7", 
"1", "2"), positionOrder = c(9L, 3L, 4L, 19L, 1L, 3L, 4L, 1L, 
5L, 1L, 2L, 3L, 1L, 2L, 7L, 2L, 2L, 3L, 3L, 3L, 1L, 2L, 5L, 7L, 
1L, 1L, 2L, 3L, 2L, 2L, 21L, 7L, 1L, 2L), points = c(0, 6, 5, 
0, 10, 6, 5, 10, 4, 10, 8, 6, 10, 8, 2, 8, 8, 6, 6, 6, 10, 8, 
4, 2, 10, 10, 8, 6, 8, 8, 0, 2, 10, 8), rank = c("3", "4", "4", 
"19", "1", "6", "3", "2", "3", "2", "3", "3", "1", "3", "1", 
"2", "2", "4", "3", "3", "1", "2", "4", "2", "2", "2", "1", "4", 
"2", "2", "2", "3", "2", "2"), year = c(2007L, 2007L, 2007L, 
2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 
2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 
2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 
2007L, 2007L, 2007L, 2007L), round = c(10L, 8L, 14L, 16L, 5L, 
17L, 11L, 11L, 12L, 6L, 9L, 4L, 13L, 7L, 6L, 16L, 4L, 9L, 14L, 
1L, 15L, 13L, 3L, 17L, 7L, 10L, 2L, 12L, 1L, 5L, 15L, 8L, 2L, 
3L), gp = c("European Grand Prix", "French Grand Prix", "Belgian Grand Prix", 
"Chinese Grand Prix", "Monaco Grand Prix", "Brazilian Grand Prix", 
"Hungarian Grand Prix", "Hungarian Grand Prix", "Turkish Grand Prix", 
"Canadian Grand Prix", "British Grand Prix", "Spanish Grand Prix", 
"Italian Grand Prix", "United States Grand Prix", "Canadian Grand Prix", 
"Chinese Grand Prix", "Spanish Grand Prix", "British Grand Prix", 
"Belgian Grand Prix", "Australian Grand Prix", "Japanese Grand Prix", 
"Italian Grand Prix", "Bahrain Grand Prix", "Brazilian Grand Prix", 
"United States Grand Prix", "European Grand Prix", "Malaysian Grand Prix", 
"Turkish Grand Prix", "Australian Grand Prix", "Monaco Grand Prix", 
"Japanese Grand Prix", "French Grand Prix", "Malaysian Grand Prix", 
"Bahrain Grand Prix"), date = c("2007-07-22", "2007-07-01", "2007-09-16", 
"2007-10-07", "2007-05-27", "2007-10-21", "2007-08-05", "2007-08-05", 
"2007-08-26", "2007-06-10", "2007-07-08", "2007-05-13", "2007-09-09", 
"2007-06-17", "2007-06-10", "2007-10-07", "2007-05-13", "2007-07-08", 
"2007-09-16", "2007-03-18", "2007-09-30", "2007-09-09", "2007-04-15", 
"2007-10-21", "2007-06-17", "2007-07-22", "2007-04-08", "2007-08-26", 
"2007-03-18", "2007-05-27", "2007-09-30", "2007-07-01", "2007-04-08", 
"2007-04-15"), gp_place = c("Nürburgring", "Circuit de Nevers Magny-Cours", 
"Circuit de Spa-Francorchamps", "Shanghai International Circuit", 
"Circuit de Monaco", "Autódromo José Carlos Pace", "Hungaroring", 
"Hungaroring", "Istanbul Park", "Circuit Gilles Villeneuve", 
"Silverstone Circuit", "Circuit de Barcelona-Catalunya", "Autodromo Nazionale di Monza", 
"Indianapolis Motor Speedway", "Circuit Gilles Villeneuve", "Shanghai International Circuit", 
"Circuit de Barcelona-Catalunya", "Silverstone Circuit", "Circuit de Spa-Francorchamps", 
"Albert Park Grand Prix Circuit", "Fuji Speedway", "Autodromo Nazionale di Monza", 
"Bahrain International Circuit", "Autódromo José Carlos Pace", 
"Indianapolis Motor Speedway", "Nürburgring", "Sepang International Circuit", 
"Istanbul Park", "Albert Park Grand Prix Circuit", "Circuit de Monaco", 
"Fuji Speedway", "Circuit de Nevers Magny-Cours", "Sepang International Circuit", 
"Bahrain International Circuit"), location = c("Nürburg", "Magny Cours", 
"Spa", "Shanghai", "Monte-Carlo", "São Paulo", "Budapest", "Budapest", 
"Istanbul", "Montreal", "Silverstone", "Montmeló", "Monza", 
"Indianapolis", "Montreal", "Shanghai", "Montmeló", "Silverstone", 
"Spa", "Melbourne", "Oyama", "Monza", "Sakhir", "São Paulo", 
"Indianapolis", "Nürburg", "Kuala Lumpur", "Istanbul", "Melbourne", 
"Monte-Carlo", "Oyama", "Magny Cours", "Kuala Lumpur", "Sakhir"
), country = c("Germany", "France", "Belgium", "China", "Monaco", 
"Brazil", "Hungary", "Hungary", "Turkey", "Canada", "UK", "Spain", 
"Italy", "USA", "Canada", "China", "Spain", "UK", "Belgium", 
"Australia", "Japan", "Italy", "Bahrain", "Brazil", "USA", "Germany", 
"Malaysia", "Turkey", "Australia", "Monaco", "Japan", "France", 
"Malaysia", "Bahrain"), forename = c("Lewis", "Lewis", "Lewis", 
"Lewis", "Fernando", "Fernando", "Fernando", "Lewis", "Lewis", 
"Lewis", "Fernando", "Fernando", "Fernando", "Fernando", "Fernando", 
"Fernando", "Lewis", "Lewis", "Fernando", "Lewis", "Lewis", "Lewis", 
"Fernando", "Lewis", "Lewis", "Fernando", "Lewis", "Fernando", 
"Fernando", "Lewis", "Fernando", "Fernando", "Fernando", "Lewis"
), surname = c("Hamilton", "Hamilton", "Hamilton", "Hamilton", 
"Alonso", "Alonso", "Alonso", "Hamilton", "Hamilton", "Hamilton", 
"Alonso", "Alonso", "Alonso", "Alonso", "Alonso", "Alonso", "Hamilton", 
"Hamilton", "Alonso", "Hamilton", "Hamilton", "Hamilton", "Alonso", 
"Hamilton", "Hamilton", "Alonso", "Hamilton", "Alonso", "Alonso", 
"Hamilton", "Alonso", "Alonso", "Alonso", "Hamilton"), name = c("McLaren", 
"McLaren", "McLaren", "McLaren", "McLaren", "McLaren", "McLaren", 
"McLaren", "McLaren", "McLaren", "McLaren", "McLaren", "McLaren", 
"McLaren", "McLaren", "McLaren", "McLaren", "McLaren", "McLaren", 
"McLaren", "McLaren", "McLaren", "McLaren", "McLaren", "McLaren", 
"McLaren", "McLaren", "McLaren", "McLaren", "McLaren", "McLaren", 
"McLaren", "McLaren", "McLaren")), row.names = c(13L, 41L, 44L, 
89L, 132L, 150L, 159L, 231L, 251L, 305L, 314L, 315L, 341L, 361L, 
363L, 384L, 387L, 430L, 466L, 486L, 493L, 512L, 581L, 599L, 635L, 
649L, 672L, 704L, 759L, 768L, 769L, 801L, 826L, 838L), class = "data.frame")

Редактировать 2 (по запросу):

Фрейм данных «Hamilton_Alonso» выглядит следующим образом (на снимке экрана показаны только первые 43 из 668 строк):

Если вы перезапустите сеанс R и выполните код в своих фрагментах вручную, возникнет ли у вас та же проблема? Если нет, возможно, это потому, что вы сделали что-то вручную, но не в файле Rmd, что привело бы к различию в поведении. Если это так, нам потребуется дополнительная информация, чтобы воспроизвести проблему, включая данные, используемые для диаграммы с использованием dput().

Phil 12.02.2023 19:23

Итак, в основном я выполняю фрагмент за фрагментом в файле Rmd, а затем на выходе получается желаемый график. Только при привязке к HTML они датапойнты исчезают. Я ничего не менял и особенно при запуске в Rmd файле и работает он не должен меняться при привязке к HTML. Что касается данных - это данные Kaggle (kaggle.com/datasets/rohanrao/…), и я хочу показать, как за каждый сезон с 2007 года Хэмилтон и Алонсо набирали очки и на какой позиции они заканчивали. Надеюсь, что ответил на ваш вопрос. вопросы.

Jeffrey Sachs 12.02.2023 22:33

Похоже, проблема где-то перед кодом, который вы нам показываете. Я с @Phil, но часто это происходит из-за того, что пользователь не использует параметризованные отчеты (правильно или вообще не использует), что приводит к изменению поведения. Если не изменить способ доступа к данным, то это может быть связано с наличием/порядком пакетов (например, plyr-vs-dplyr, хотя я не думаю, что здесь проблема именно в этом). Здесь было бы полезно больше контекста к документу.

r2evans 12.02.2023 23:16

@JeffreySachs Не могли бы вы предоставить больше информации? Здесь представлено несколько фреймов данных, и хотя я мог бы выяснить, какие из них вы использовали, чтобы добраться до этого момента, я не чувствую, что должен тратить на это время. Опять же, самое быстрое, что можно сделать, это запустить dput(gp_2007) и включить вывод как часть вашего вопроса.

Phil 13.02.2023 01:38

Я не могу воспроизвести вашу проблему: i.imgur.com/MmRJvDD.png

Phil 13.02.2023 22:34

@Phil Как уже упоминалось, при выполнении его в моем RStudio как фрагмента моего файла Rmd у меня тоже нет проблемы. При ввязывании его в HTML датапойнты исчезают. Я сейчас загрузил весь код и вывод, как выглядит мой HTML файл - ссылка

Jeffrey Sachs 13.02.2023 23:08

Изображение, которое я предоставил, представляет собой HTML-файл, который был связан.

Phil 13.02.2023 23:20

@JeffreySachs Не могли бы вы предоставить результат dput(Hamilton_Alonso)? Я попытаюсь немного изменить ваш код, чтобы обойти эту проблему.

Phil 13.02.2023 23:48

@Phil Я добавил скриншот фрейма данных, так как не могу вывести вывод dput(Hamilton_Alonso), так как тело ограничено 30 000 символов. Я очень ценю вашу помощь и время, которое вы тратите на это!

Jeffrey Sachs 14.02.2023 18:46
Конечные и Readonly классы в PHP
Конечные и Readonly классы в PHP
В прошлом, когда вы не хотели, чтобы другие классы расширяли определенный класс, вы могли пометить его как final.
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
БЭМ: Конвенция об именовании CSS
БЭМ: Конвенция об именовании CSS
Я часто вижу беспорядочный код CSS, особенно если проект большой. Кроме того, я совершал эту ошибку в профессиональных или личных проектах и...
Революционная веб-разработка ServiceNow
Революционная веб-разработка ServiceNow
В быстро развивающемся мире веб-разработки ServiceNow для достижения успеха крайне важно оставаться на вершине последних тенденций и технологий. По...
Как добавить SEO(Search Engine Optimization) в наше веб-приложение и как это работает?
Как добавить SEO(Search Engine Optimization) в наше веб-приложение и как это работает?
Заголовок веб-страницы играет наиболее важную роль в SEO, он помогает поисковой системе понять, о чем ваш сайт.
Конфигурация Jest в angular
Конфигурация Jest в angular
В этой статье я рассказываю обо всех необходимых шагах, которые нужно выполнить при настройке jest в angular.
0
9
77
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Без данных для проверки я делаю это вслепую. Смысл в том, чтобы удалить дублирование одного и того же кода для каждого года, используя purrr::map() для запуска одного и того же фрагмента кода для каждого года.

Затем для диаграммы я бы рекомендовал использовать patchwork вместо gridExtra, чтобы объединить диаграммы вместе.

library(purrr)

Hamilton_Alonso_plot_dfl <- Hamilton_Alonso |> 
  filter(year %in% c(2007:2018, 2021:2022)) |>
  group_split(year) |> 
  map(function(x) { x |> 
    group_by(location, surname) |> 
      summarise(total_points = sum(points), 
                position = as.numeric(positionText),
                .groups = "drop")
  })

library(patchwork)

make_charts <- function(x, year) {
  points_chart <- ggplot(x, aes(
      x = location,
      y = total_points,
      group = surname,
      color = surname
    )) +
    geom_bar(aes(fill = surname), position = position_dodge2(width = 0.5, preserve = "single"), stat = "identity", alpha = 0.2) +
    geom_smooth(se = FALSE) +
    scale_y_continuous(breaks = seq(0, 50, 1), limits = c(0,25)) +
    scale_x_discrete(guide = guide_axis(angle = 90)) +
    xlab("GP Location") +
    ylab("Points collected")
  
 positions_chart <- ggplot(x, aes(
   x = location,
   y = position,
   group = surname,
   color = surname,
 )) +
   geom_point() +
   geom_line() +
   scale_y_reverse(breaks = seq(24, 1), limits = c(24,1)) +
   scale_x_discrete(guide = guide_axis(angle = 90)) +
   xlab("GP Location") +
   ylab("Place reached") 
 
 points_chart + positions_chart + plot_annotation(title = year)
}

map2(Hamilton_Alonso_plot_dfl, c(2007:2018, 2021:2022), make_charts)

К сожалению, это не работает из-за некоторых пропущенных значений, приводящих к векторам неравной длины и, в конечном итоге, к ошибке повторного использования типа: Error in map2(): ! Can't recycle .x (size 21) to match .y (size 14). Backtrace: 1. purrr::map2(Hamilton_Alonso_plot_dfl, c(2007:2018, 2021:2022), positions_chart) Тем не менее, я высоко ценю приложенные вами усилия!

Jeffrey Sachs 15.02.2023 23:29

Добавлена ​​строка filter(), чтобы заставить ее совпадать.

Phil 16.02.2023 00:30
map2(Hamilton_Alonso_plot_dfl, c(2007:2018, 2021:2022), positions_chart) теперь выдает ошибку Error in as_mapper(.f, ...) : object 'positions_chart' not found 3. as_mapper(.f, ...) 2. map2_("list", .x, .y, .f, ..., .progress = .progress) 1. map2(Hamilton_Alonso_plot_dfl, c(2007:2018, 2021:2022), positions_chart) @Phil
Jeffrey Sachs 17.02.2023 09:28

Так что извините - мозг пердит с моей стороны. Последняя строка должна называться make_charts, а не positions_chart. Я сделал доработку выше.

Phil 17.02.2023 16:23

Другие вопросы по теме