В geom_bezier2 указание размера как функции координат графика - PullRequest
0 голосов
/ 29 марта 2020

В geom_bezier2(), в каких единицах есть size и можно ли указать его как функцию координат графика?

library(ggplot2); library(ggforce)

beziers <- 
  data.frame(
    x = c(1, 2, 3, 4),
    y = c(1, 1, 0, 0),
    type = rep('quadratic', 4),
    point = c('end', 'control', 'control', 'end')
)

colfunc <- colorRampPalette(c("orange", "blue"))

ggplot() + 
  scale_y_continuous(limits = c(0, 1.5)) +
  geom_bezier2(aes(x = x, y = y, 
                   group = type),
               size = seq(35, 3, length.out = 100), # respecify as function of plot coordinates?
               color = colfunc(100),
               alpha = .4,
               data = beziers)

1 Ответ

0 голосов
/ 29 марта 2020

Насколько мне известно и в документации ggplot2, единица измерения size равна mm, т. Е. «Размер линии равен ее ширине в мм». Источник: здесь .

И да. Используя функцию after_stat, представленную в ggplot2 3.3.0, вы можете указать size как функцию координат графика.

В качестве примера и для уточнения разницы я сделал четыре сюжета. Сначала нарисуйте результат вашего кода. Второй график отображает сложную функцию x по размеру, которая по существу не влияет на размеры по графику. Графики 3 и 4 используют after_stat. На графике 3 отображаются интерполированные значения x, вычисленные по размеру geom/stat_bezier2, а на графике 4 применяется лог-преобразование.

library(ggplot2); library(ggforce); library(patchwork)

beziers <- 
  data.frame(
    x = c(1, 2, 3, 4),
    y = c(1, 1, 0, 0),
    type = rep('quadratic', 4),
    point = c('end', 'control', 'control', 'end')
  )

colfunc <- colorRampPalette(c("orange", "blue"))

# Setting size and color as functions of x using after_stat
p1 <- ggplot() + 
  scale_y_continuous(limits = c(0, 1.5)) +
  geom_bezier2(aes(x = x, y = y, 
                   group = type),
               size = seq(35, 3, length.out = 100), # respecify as function of plot coordinates?
               color = colfunc(100),
               alpha = .4,
               data = beziers) + 
  labs(title = "Original plot")

p2 <- ggplot() + 
  scale_y_continuous(limits = c(0, 1.5)) +
  geom_bezier2(aes(x = x, y = y, 
                   group = type, 
                   size = exp(log(x)^2 + 10)),
               color = colfunc(100),
               alpha = .4,
               data = beziers) +
  scale_size(range = c(35, 3)) +
  guides(size = FALSE) + 
  labs(title = "exp(log(x)^2 + 10) mapped on size")

p3 <- ggplot() + 
  scale_y_continuous(limits = c(0, 1.5)) +
  geom_bezier2(aes(x = x, y = y, 
                   group = type, 
                   size = after_stat(x)),
               color = colfunc(100),
               alpha = .4,
               data = beziers) +
  scale_size(range = c(35, 3)) +
  guides(size = FALSE) + 
  labs(title = "x mapped on size using after stat")

p4 <- ggplot() + 
  scale_y_continuous(limits = c(0, 1.5)) +
  geom_bezier2(aes(x = x, y = y, 
                   group = type, 
                   size = after_stat(log(x))),
               color = colfunc(100),
               alpha = .4,
               data = beziers) +
  scale_size(range = c(35, 3)) +
  guides(size = FALSE)  + 
  labs(title = "log(x) mapped on size using after stat")

(p1 + p2) / (p3 + p4)

Создано в 2020-03-29 пакетом Представить (v0.3.0)

...