Совет / о том, как строить гистограммы рядом с линейным графиком, проходящим через ggplot2 - PullRequest
1 голос
/ 28 мая 2019

В настоящее время я заканчиваю свой магистерский проект и мне нужно добавить немного графики для написания.Не слишком утомительно, у меня есть некоторые данные, связанные с параметрами AR (1) в диапазоне от 0,1 до 0,9 с шагом 0,1.Поэтому я подумал о создании граненой гистограммы, подобной приведенной ниже (не беспокойтесь о отвратительном фруктовом салате цветов, он не будет использоваться).faceted histogram

Я использовал этот код.

ggplot(opt_lens_geom,aes(x=l_1024,fill=factor(rho))) + geom_histogram()+coord_flip()+facet_grid(.~rho,scales = "free_x")

Я также хотел бы нарисовать линию тренда для средних значений, поскольку параметр AR (1) имеет значениенепрерывен.На более поздней итерации я удалил заполнение и сделал его «похожим» на один график, но у меня возникли проблемы с совпадением конечных точек, поскольку каждый аспект является отдельным графическим устройством.Кто-нибудь может дать мне несколько советов, как это сделать?Я не особенно неравнодушен к огранке, поэтому, если она не нужна, я покончу с ней.

Я попытаюсь загрузить образцы данных, но все имитирующие 100 значений для каждого из 9 rhos будут работать только для того, чтобы получитьэто началось как:

opt_lens_geom <- data.frame(rho= rep(seq(0.1,0.9,by=0.1),each=100),l_1024=rnorm(900))

Ответы [ 3 ]

2 голосов
/ 28 мая 2019

Вы можете рассмотреть ggridges .Я предположил, что вы хотите срединное значение для каждого значения rho.

library(ggplot2)
library(ggridges)
library(dplyr)

set.seed(1001)
opt_lens_geom <- data.frame(rho = rep(seq(0.1, 0.9, by = 0.1), each = 100), 
                            l_1024 = rnorm(900))

opt_lens_geom %>% 
  mutate(rho_f = factor(rho)) %>% 
  ggplot(aes(l_1024, rho_f)) + 
  stat_density_ridges(quantiles = 2, quantile_lines = TRUE)

Результат.Вы можете добавить scale = 1 в качестве параметра к stat_density_ridges, если вам не нравится степень перекрытия.

enter image description here

0 голосов
/ 28 мая 2019

Попробуйте следующее. Он использует предварительно вычисленный фрейм данных медиан.

library(ggplot2)

df <- iris[c(1, 5)]
names(df) <- c("val", "rho")

med <- plyr::ddply(df, "rho", summarise, m = median(val))

ggplot(data = df, aes(x = val, fill = factor(rho))) +
  geom_histogram() +
  coord_flip() +
  geom_vline(data = med, aes(xintercept = m), colour = 'black') +
  facet_wrap(~ factor(rho))

enter image description here

0 голосов
/ 28 мая 2019

Вы могли бы сделать вариант с использованием geom_violin вместо использования гистограмм, хотя вы не получили бы меток, просто представление об относительной плотности.Пример с составленными данными:

df = data.frame(
    rho = rep(c(0.1, 0.2, 0.3), each = 50),
    val = sample(1:10, 150, replace = TRUE)
)
df$val = df$val + (5 * (df$rho == 0.2)) + (8 * (df$rho == 0.3))

ggplot(df, aes(x = rho, y = val, fill = factor(rho))) +
    geom_violin() +
    stat_summary(aes(group = 1), colour = "black",
                 geom = "line", fun.y = "median")

Это создает скрипку для каждого значения rho и объединяет медианы для каждой скрипки.

enter image description here

...