выравнивание линии в ggplot с использованием geom_path или geom_line

avatar
Alistair Leak
8 августа 2021 в 23:48
53
1
1

Ищу совет/информацию относительно выравнивания линии при использовании ggplot geom_line, geom_path или geom_segment.

В моем сценарии я направил данные. То есть от a до b и от b до a. Для каждого я хотел бы сместить размер линии, чтобы было ясно, какой объем применяется в каждом направлении.

Я представил репрекс ниже, где линии нанесены непосредственно друг на друга.

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

Заранее спасибо.

library(tidyverse)
#> Warning: package 'tidyverse' was built under R version 4.0.4
#> Warning: package 'dplyr' was built under R version 4.0.4

# create sample data
network_data <-
  tibble(origin_x = c(1,2), origin_y= c(1,2), dest_x = c(2,1), dest_y = c(2,1), flow = c(2, 3))

#generate plot
ggplot(network_data) +
  geom_segment(aes(x = origin_x, y = origin_y, xend = dest_x, yend = dest_y, size = flow, colour = origin_x), alpha =0.5)

Создано 09 августа 2021 г. в пакете reprex (v1.0.0)

Источник

Ответы (1)

avatar
user102162
9 августа 2021 в 01:19
0

Вы можете попробовать geom_curve с аргументом curvature, чтобы согнуть линии наружу:

ggplot(
  data = network_data,
  mapping = aes(
    x = origin_x,
    y = origin_y,
    xend = dest_x,
    yend = dest_y,
    size = flow,
    color = origin_x
  )
) +
geom_curve(
  alpha = 0.5,
  arrow = arrow(
    type = "closed",
    angle = 10
   ),
  arrow.fill = "black",
  curvature = 0.1,
  lineend = "round"
)
Alistair Leak
9 августа 2021 в 01:37
0

Спасибо @ user102162. Аккуратный трюк. В идеальном мире они будут параллельны центральной линии.