Когда я собираю свой 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 строк):
Итак, в основном я выполняю фрагмент за фрагментом в файле Rmd, а затем на выходе получается желаемый график. Только при привязке к HTML они датапойнты исчезают. Я ничего не менял и особенно при запуске в Rmd файле и работает он не должен меняться при привязке к HTML. Что касается данных - это данные Kaggle (kaggle.com/datasets/rohanrao/…), и я хочу показать, как за каждый сезон с 2007 года Хэмилтон и Алонсо набирали очки и на какой позиции они заканчивали. Надеюсь, что ответил на ваш вопрос. вопросы.
Похоже, проблема где-то перед кодом, который вы нам показываете. Я с @Phil, но часто это происходит из-за того, что пользователь не использует параметризованные отчеты (правильно или вообще не использует), что приводит к изменению поведения. Если не изменить способ доступа к данным, то это может быть связано с наличием/порядком пакетов (например, plyr-vs-dplyr, хотя я не думаю, что здесь проблема именно в этом). Здесь было бы полезно больше контекста к документу.
@JeffreySachs Не могли бы вы предоставить больше информации? Здесь представлено несколько фреймов данных, и хотя я мог бы выяснить, какие из них вы использовали, чтобы добраться до этого момента, я не чувствую, что должен тратить на это время. Опять же, самое быстрое, что можно сделать, это запустить dput(gp_2007) и включить вывод как часть вашего вопроса.
Я не могу воспроизвести вашу проблему: i.imgur.com/MmRJvDD.png
@Phil Как уже упоминалось, при выполнении его в моем RStudio как фрагмента моего файла Rmd у меня тоже нет проблемы. При ввязывании его в HTML датапойнты исчезают. Я сейчас загрузил весь код и вывод, как выглядит мой HTML файл - ссылка
Изображение, которое я предоставил, представляет собой HTML-файл, который был связан.
@JeffreySachs Не могли бы вы предоставить результат dput(Hamilton_Alonso)? Я попытаюсь немного изменить ваш код, чтобы обойти эту проблему.
@Phil Я добавил скриншот фрейма данных, так как не могу вывести вывод dput(Hamilton_Alonso), так как тело ограничено 30 000 символов. Я очень ценю вашу помощь и время, которое вы тратите на это!
Без данных для проверки я делаю это вслепую. Смысл в том, чтобы удалить дублирование одного и того же кода для каждого года, используя 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) Тем не менее, я высоко ценю приложенные вами усилия!
Добавлена строка filter(), чтобы заставить ее совпадать.
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
Так что извините - мозг пердит с моей стороны. Последняя строка должна называться make_charts, а не positions_chart. Я сделал доработку выше.
Если вы перезапустите сеанс R и выполните код в своих фрагментах вручную, возникнет ли у вас та же проблема? Если нет, возможно, это потому, что вы сделали что-то вручную, но не в файле Rmd, что привело бы к различию в поведении. Если это так, нам потребуется дополнительная информация, чтобы воспроизвести проблему, включая данные, используемые для диаграммы с использованием dput().