Наложение гистограммы с плотностью ядра для разных наборов данных в разных масштабах x - PullRequest
0 голосов
/ 16 мая 2018

У меня есть два графика для разных подмножеств моих данных:

  1. один график оценки ядра для данных> 0
  2. один гистограмма (фактически только один бин) для данных == 0

, который я хотел бы объединить в одном графике, используя ggplot2.

Проблема в том, что ggplot продолжает рисовать линию моего ядра для всей оси x.

values <- c(25.222222, 6.000000, 2.057143, 0.000000, 2.142857, 0.000000, 73.666667, 
            4.081081, 43.133333, 18.937500, 60.822222, 23.379310, 54.954412, 8.492308, 
            67.646250, 15.885000, 38.585859, 46.810606, 31.565152, 39.813889, 
            40.620000, 25.958000, 54.821429, 9.000000, 33.040476, 50.329670, 43.525641, 
            33.508696, 34.265385, 57.003544, 36.690434, 48.074074, 70.372222, 
            77.602564, 29.997436, 71.739683, 11.320000, 2.938776, 10.101562, 35.037956)

df <- data.frame(variable = "TH_part", value=values)

library(ggplot2)

p1.kernel <- ggplot(subset(df, value!=0), aes(x=value, y=..density.., color=variable)) +
  geom_density() + 
  scale_x_continuous(limits = c(0, 200)) + theme_bw()

p1.kernel + 
  geom_histogram(data=subset(df, value==0), 
                 aes(x=value, y=..density.., fill=variable), 
                 breaks=seq(-10,200,by=10), alpha=0.4) + 
  scale_x_continuous(limits = c(-10, 200)) + 
  theme(legend.position="none")

график ядра в определенных пределах:

kernel plot within limits

ядро ​​плюс гистограмма, но за пределами:

kernel plus histogram but outside limits

Как я могу использовать различные ограничения на мой xaxis?

И кроме того, почему диаграммы больше не связаны?Если я посмотрю на это:

ggplot(df, aes(x=value, y=..density.., color=variable)) +
  geom_histogram(breaks=seq(0,200,by=10), fill="white") +
  geom_density() + scale_x_continuous(limits = c(0, 200)) + theme_bw()

, то полоса / корзина должна быть намного меньше (поскольку только часть в начале равна 0).

Дополнительно: использование stat_density(adjust = 0.5) для управлениякоэффициент сглаживания ядра даст мне второе ядро ​​на графике.Как я могу использовать меньший коэффициент сглаживания на наложенном графике выше?

РЕДАКТИРОВАТЬ:

с помощью GGamba Я получил этот график с подсчетами по оси Y:

plot with counts on y-axis

Здесь ячейка с 0 записями значительно меньше по плотности.

1 Ответ

0 голосов
/ 16 мая 2018

Вам необходимо использовать аргумент trim. От ?geom_density:

отделка Этот параметр имеет значение, только если вы отображаете несколько плотностей на одном графике. Если FALSE, по умолчанию, каждая плотность рассчитывается по всему диапазону данных. Если TRUE, каждая плотность вычисляется в диапазоне этой группы: это обычно означает, что оценочные значения x не будут выстроены в очередь, и, следовательно, вы не сможете суммировать значения плотности.

И вы можете использовать аргумент adjust также отлично в geom_density.

values <- c(25.222222, 6.000000, 2.057143, 0.000000, 2.142857, 0.000000, 73.666667, 4.081081, 43.133333, 18.937500, 60.822222, 23.379310, 54.954412, 8.492308, 67.646250, 15.885000, 38.585859, 46.810606, 31.565152, 39.813889, 40.620000, 25.958000, 54.821429, 9.000000, 33.040476, 50.329670, 43.525641, 33.508696, 34.265385, 57.003544, 36.690434, 48.074074, 70.372222, 77.602564, 29.997436, 71.739683, 11.320000, 2.938776, 10.101562, 35.037956)

df <- data.frame(variable = "TH_part", value=values)

library(ggplot2)

ggplot(subset(df, value!=0), aes(x=value, y=..density.., color=variable)) +
  geom_density(trim = TRUE, adjust = .5) + 
  geom_histogram(data=subset(df, value==0), 
                 aes(x=value, y=..density.., fill=variable), alpha=0.4, breaks=seq(-10,200,by=10)) + 
  scale_x_continuous(limits = c(-10, 200)) + 
  theme_bw() +
  theme(legend.position="none")

Создано в 2018-05-16 с помощью пакета Представить (v0.2.0).

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