Создайте geom_line или аналогичный с альфа-каналом "затухания" ниже - PullRequest
1 голос
/ 19 апреля 2019

Я хотел бы создать geom_line, или, возможно, geom_ribbon или geom_area, с эффектом "затухания" ниже линии, аналогичной той, которая используется в терминале Thomson Reuters Eikon.

Я пробовал очень простой подход, основанный на geom_ribbon, устанавливая альфа на основе значения y, с идеей, что я мог бы нормализовать его на основе основанного значения, но получил эту ошибку: Error in f(...) : Aesthetics can not vary with a ribbon

(нерабочий) пример кода:

library( tidyverse )
library( ggplot2 )

x <- seq( 0, 99 )
y <- rnorm( 100 ) + 4

tib <- tibble( x, y )

gp <- ggplot( tib ) +
  geom_ribbon( aes( x=x, ymax=y, ymin=y-1, alpha=y) ) +
  geom_line( aes( x=x, y=y ) )

Мне бы хотелось, чтобы выходные данные напоминали первый график в этом сообщении в блоге (по иронии судьбы о ggplot2 geom_line): Подробное руководство по построению линейных графиков :

enter image description here

Или, как уже упоминалось, выход терминала Thomson Reuters Eikon, показанный в верхней части двух графиков на втором изображении на этой странице: Обзор Thomson Reuters Eikon :

enter image description here

1 Ответ

0 голосов
/ 20 апреля 2019

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

ggplot(tib) +

  # rectangular gradient layer as background
  annotation_raster(raster = c("blue",      # top colour
                               "white") %>% # bottom colour
                      alpha(0.5),           # alpha
                    xmin = min(tib$x), xmax = max(tib$x),
                    ymin = 0, ymax = max(tib$y),
                    interpolate = TRUE) +

  # whiteout layer (replace white with relevant panel.background's
  # fill value, if a non-white background theme is used)
  geom_ribbon(aes(x = x, ymin = y, ymax = Inf), 
              fill = "white") +

  # actual line
  geom_line(aes(x = x, y = y), 
            color = "blue", size = 1) +
  theme_classic()

plot

Данные:

set.seed(4321)
x <- seq(0, 99)
y <- rnorm(100) + 4

tib <- tibble(x, y)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...