Построение анимированного обмена (построение направленных ребер)

Я однажды виделэтот сюжет (ССЫЛКА) на судоходных торгах. Я работаю с диалоговыми обменами и подумал, что может быть интересно отобразить такой обмен с использованием R.

Это более важный вопрос, но я думаю, что он может быть полезен для сообщества в целом.

Допустим, у нас за столом сидят 7 человек:

И я записал диалоги, разговоры докладчиков и слушателей. Я создал фиктивную data.frame с такой информацией. вот голова:

  speaker receiver duration speaker.x speaker.y receiver.x receiver.y
1       D        A       16     0.626     0.163      0.755      0.741
2       E        D        3     0.391     0.161      0.626      0.163
3       A        B       25     0.755     0.741      0.745      0.517
4       B        E        6     0.745     0.517      0.391      0.161
5       B        C       45     0.745     0.517      0.737      0.251
6       E        F       37     0.391     0.161      0.258      0.285

Я хотел бы создать анимированные стрелки (от говорящего к получателю), которые раскрашиваются по динамику и взвешиваются (время / продолжительность, длина и / или толщина) и анимируются так же, как и данные о доставке (номер строки - это порядок, в котором речь происходит). Я думаю, что, возможно, пакет анимации может быть полезен здесь, но понятия не имею. Может быть, это невозможно с R в настоящее время (как указано в заявлении Бена Шмидта,«Я надеялся, что смогу отказаться от ArcGIS для следующего проекта карты, который я делаю, и сохранить все в R - после этого опыта я не уверен, что это будет возможно»).

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

Вот данные и графики этого далеко.

#the data
the_table <- data.frame(
    xmin = .3,
    xmax = .7,
    ymin = .2,
    ymax = .8
)

points <- structure(list(x = c(0.754594594594595, 0.744864864864865, 0.736756756756757, 
    0.626486486486486, 0.391351351351351, 0.258378378378378, 0.261621621621622
    ), y = c(0.741172932330827, 0.517052631578947, 0.250706766917293, 
    0.163007518796992, 0.161383458646617, 0.284812030075188, 0.494315789473684
    )), .Names = c("x", "y"))


mapping <- data.frame(person=LETTERS[1:7], points)

set.seed(10)
n <- 120
dat <- data.frame(id = 1:n, speaker=sample(LETTERS[1:7], n, TRUE),
     receiver=sample(LETTERS[1:7], n, TRUE),
    duration=sample(1:50, n, TRUE)
)
dat <- dat[as.character(dat$speaker)!=as.character(dat$receiver), ]

dat <- merge(merge(dat, mapping, by.x=c("speaker"), by.y=c("person"), sort=FALSE), 
    mapping, by.x=c("receiver"), by.y=c("person"), sort=FALSE)
names(dat)[5:8] <- c("speaker.x", "speaker.y", "receiver.x", "receiver.y")
dat <- dat[order(dat$id), c(2, 1, 4:8)]
rownames(dat) <- NULL

#the plot
ggplot() +
    geom_point(data=mapping, aes(x=x, y=y), size=10) +
    geom_text(data=mapping, aes(x=x, y=y, label=as.character(person)), 
        color="blue") +
    ylim(-.2, 1.2) + xlim(-.2, 1.2) + 
    geom_rect(data=the_table, aes(xmax = xmax, xmin=xmin, 
        ymin=ymin, ymax = ymax), fill="gray80")

Я не женат на ggplot2, но неравнодушен к нему, и кажется, что многие из этих видов графиков используют ggplot2.

Ответы на вопрос(1)

Ваш ответ на вопрос