Создание кривых разного размера для соединения точек в ggplot2 - PullRequest
0 голосов
/ 25 апреля 2018

Проблема:

Я хочу соединить точки с кривыми, в то время как размер кривой настраивается вдоль ее траектории в соответствии с размером соответствующих конечных точек.

Воспроизводимый пример:

library("tidyverse")
df <- data.frame(x=c(1,3,2),
             y=c(1,4,3),
             value=c(2,10,15),
             order=c(1,2,3))

ggplot(df) +
  geom_point(aes(x=x,
                 y=y,
                 size=value),
             alpha=0.5) 

enter image description here

Пока все хорошо.Теперь я хотел бы добавить кривые, соединяющие точки, в соответствии со следующими правилами:

  1. Кривые должны связывать точки в хронологическом порядке 1 - 2 - 3 (в соответствии с df$order, которыйis)
  2. Размеры конечной точки, созданные с помощью aes(size=value), определяют соответствующие размеры кривой.
  3. Размер кривой увеличивается / уменьшается приятным, сглаженным способом.

Я бы хотел достичь более или менее этого (извините за мои ужасные навыки рисования MS ... к сожалениюНа этом эскизе нарушается правило 3 ...):

Было бы также хорошо иметь возможность передать aes() кривым,такие как colour ... Я играл с geom_curve и geom_segment, но я не очень далеко ...

Все упражнение служит для воспроизведения этого удивительная инфографика.

1 Ответ

0 голосов
/ 25 апреля 2018
df %>% 
  mutate( x1 = c(NA, x[1:(nrow(df)-1) ] )) %>% 
  mutate( x2 = c(NA, x[2:(nrow(df)) ]   )) %>% 
  mutate( y1 = c(NA, y[1:(nrow(df)-1) ] )) %>% 
  mutate( y2 = c(NA, y[2:(nrow(df)) ]   )) ->df

df %>% 
  ggplot(aes(x=x, y=y,size=value)) +
  geom_point(alpha=0.5) +
  geom_curve(aes(x = x1, xend = x2, y = y1, yend = y2),
         curvature = .25, size = 1)

geom_curve

...