Создать барплот в R с градиентом на основе плотности - PullRequest
0 голосов
/ 24 октября 2019

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

Надеюсь, мне не нужно вручную рисовать столбцы в виде заполненных фигур.

Представьте, есливместо скрипок или коробок была полоса с градиентом, представляющим плотность.

enter image description here

library(tidyverse)
library(ggplot)

df = data.frame(
  A = 2.3 + 7*rnorm(100),
  B = 0 + 5*rnorm(100),
  C = 4 + 2*rnorm(100)
)

df %>%
  gather() %>%
  ggplot(aes(x=key, y=value)) + 
  geom_violin(scale="width", fill='red', alpha=0.5) + 
  geom_boxplot(fill='green', alpha=0.5)

1 Ответ

2 голосов
/ 24 октября 2019

Итак, это мое самое близкое приближение к тому, что я получил от вашего вопроса:

# Dummy data
df <- data.frame(
  y = c(rnorm(100, 4), rnorm(100, 12)),
  x = rep(c(1, 2), each = 100)
)

ggplot(df, aes(x, y, group = x)) +
  # To fill gap between 0 and actual data
  stat_summary(geom = "rect",
               fun.ymin = function(x){0},
               fun.ymax = min,
               aes(xmin = x - 0.4, xmax = x + 0.4, fill = 0)) +
  # To make the density part
  stat_ydensity(aes(fill = stat(density), 
                    xmin = x - 0.4, xmax = x + 0.4,
                    # Nudge y by a bit depending on the spread of your data
                    ymin = stat(y) - 0.01, ymax = stat(y) + 0.01), 
                geom = "rect", trim = FALSE)

enter image description here

Соответствует ли это требованиям?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...