Альфа-эстетика не работает с geom_segment — почему?

Я играл с некоторыми футбольными данными и столкнулся с проблемой использования альфа-эстетики. По сути, я попытался нарисовать несколько пасов на футбольном поле, как здесь: https://github.com/FCrSTATS/Visualisations/blob/master/3.CreateAPitch.md Однако, делая это с помощью geom_segment и альфа-эстетики, я остался без линий, когда альфа была меньше 1, только были нанесены стрелки. В чем причина? Это что-то с темой, определенной в функции из ссылки, упомянутой ранее? Код, который я использовал:

pitch <- createPitch(10600, 7040, "#202020", "#797876", "#202020", "#131313")

pitch + geom_segment(data = data,
                 aes(x = x/100 * xmax, y = y/100 * ymax, 
                     xend = as.numeric(as.character(pass_end_x))/100 * xmax, 
                     yend = as.numeric(as.character(pass_end_y))/100 * ymax,
                     alpha = data$n/max(data$n)),
                 color = "blue", 
                 arrow = arrow(length = unit(0.3, "cm"), ends = 'first', type = 'closed'))

и данные:

structure(list(x = c(77.076, 66.7944444444444, 60.425, 64.7828571428571
), y = c(77.672, 19.0888888888889, 52.8055555555556, 90.0485714285714
), pass_end_x = c(88.296, 77.8240740740741, 70.0472222222222, 
73.5857142857143), pass_end_y = c(61.204, 20.7796296296296, 
64.0083333333333, 89.8485714285714), n = c(25L, 54L, 36L, 35L)), .Names = 
c("x", "y", "pass_end_x", "pass_end_y", "n"), row.names = c(NA, -4L), class 
= c("tbl_df", "tbl", "data.frame"))

person jakes    schedule 10.03.2018    source источник
comment
Никогда не используйте $ внутри aes(). Если вы просто поместите alpha = n / max(n) в свое сопоставление, это, вероятно, сработает.   -  person Gregor Thomas    schedule 10.03.2018
comment
Спасибо за чаевые! Однако это не сработало.   -  person jakes    schedule 10.03.2018
comment
@MarcoSandri, я обновил пост данными.   -  person jakes    schedule 10.03.2018
comment
У меня работает - публикую ответ.   -  person Gregor Thomas    schedule 10.03.2018


Ответы (1)


Игнорируя часть шага, избавление от $ работает просто отлично:

dd = structure(list(x = c(77.076, 66.7944444444444, 60.425, 64.7828571428571
), y = c(77.672, 19.0888888888889, 52.8055555555556, 90.0485714285714
), pass_end_x = c(88.296, 77.8240740740741, 70.0472222222222, 
73.5857142857143), pass_end_y = c(61.204, 20.7796296296296, 
64.0083333333333, 89.8485714285714), n = c(25L, 54L, 36L, 35L)), .Names = 
c("x", "y", "pass_end_x", "pass_end_y", "n"), row.names = c(NA, -4L), class 
= c("tbl_df", "tbl", "data.frame"))

xmax = ymax = 1

p = ggplot(
    dd,
    aes(
        x = x / 100 * xmax,
        y = y / 100 * ymax,
        xend = as.numeric(as.character(pass_end_x)) / 100 * xmax,
        yend = as.numeric(as.character(pass_end_y)) / 100 * ymax,
        alpha = n / max(n)
    )
) +
    geom_segment(color = "blue",
                             arrow = arrow(
                                length = unit(0.3, "cm"),
                                ends = 'first',
                                type = 'closed'
                             ))

p

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

Вы можете легко увидеть разницу в прозрачности. Добавление темы по вашей ссылке по-прежнему нормально:

p + theme_blankPitch()

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

Добавление шага из вашего вопроса делает линии более трудными для просмотра из-за вашего выбора цвета, но они все еще существуют:

pitch <- createPitch(10600, 7040, "#202020", "#797876", "#202020", "#131313")
pitch + geom_segment(data = dd,
    aes(
        x = x / 100 * xmax,
        y = y / 100 * ymax,
        xend = as.numeric(as.character(pass_end_x)) / 100 * xmax,
        yend = as.numeric(as.character(pass_end_y)) / 100 * ymax,
        alpha = n / max(n)
    ), color = "blue",
                             arrow = arrow(
                                length = unit(0.3, "cm"),
                                ends = 'first',
                                type = 'closed'
                             ))

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

Если вы увеличите размер сегментов (скажем, size = 1.5), они станут немного четче, но я бы порекомендовал другой выбор цвета. Еще одна корректировка, которую вы можете сделать, это установить пределы scale_alpha_continuous, чтобы сделать минимум диапазона более непрозрачным. Минимум по умолчанию — 0,1, вы можете увеличить его до 0,2 или даже выше.

person Gregor Thomas    schedule 10.03.2018
comment
Что ж, это довольно неловко, но сейчас я заметил, что линии не отображались на панели графика. После уменьшения там отображались ок. В любом случае спасибо за помощь! - person jakes; 10.03.2018