2013-05-02 3 views
-2

У меня есть гистограмма, показанная ниже, и я добавил две плотные участки поверх этого. Это соответствует 2 классам, которые составляют данные.Как добавить вторую ось y для графика плотности, наложенного на гистограмму в R?

histogram Я хочу добавить вторую ось y справа, но с той же высотой, что и 1-я ось y, так что высота участков плотности не выглядит такой маленькой. Относительные высоты участков 2 плотности должны непосредственно сопоставимы, так что их суммарная площадь составляет 1

+3

Пусковой механизм без кода и нет данных. –

+0

Вы можете использовать 'doubleYScale' из пакета 'latticeExtra'. См. Эту [ссылку] (http://latticeextra.r-forge.r-project.org/#doubleYScale&theme=default) для получения дополнительной информации. – fdetsch

ответ

1
z <- rnorm(100,.3,.2) 
hist(z, xlab="", ylab="", main="", yaxt="n") 
par(new=TRUE) 
plot(density(z), xlab="", ylab="", main="", xaxt="n", yaxt="n") 
axis(2, ...) # plug in the relevant values for `at` and `labels` 
axis(4, ...) # plug in the relevant values for `at` and `labels` 
+0

Спасибо за ваш ответ! Есть ли у меня способ сделать относительные высоты плотностей напрямую сопоставимыми. Помните, что у меня есть 2 плотных графика для двух классов данных, составляющих гистограмму. Кроме того, как мне узнать значения плотности, т. Е. Каково должно быть значение второй оси y? – Cheng

+0

Вы можете сделать что-то вроде 'max (плотность (z) $ y)', чтобы получить верхний предел для каждой плотности, а затем указать оси соответственно. Для двух плотностей вы, очевидно, делаете это отдельно для каждого и просто повторяете бит «plot (плотность (z), ...)» для второй плотности. – Thomas

2

Если вы используете ggplot2 вы можете использовать geom_density(aes(y=..scaled..)) и geom_histogram(aes(y = ..ndensity)) в масштабе аналогичным образом

например

x <- rnorm(400, 10, 5) 
y <- rnorm(400, -10, 5) 
dd <- rbind(data.frame(value = x, id = 'x'), data.frame(value = y, id = 'y')) 
ggplot(dd, aes(x=value)) + 
    geom_histogram(aes(y=..ndensity..)) + 
    geom_density(aes(colour = id, y = ..scaled..)) 

enter image description here

+0

Спасибо вам за ответ! Я ошибся в своем первоначальном вопросе. Общая площадь площадей с плотностью 2 должна быть равна 1, чтобы они были непосредственно сопоставимы. Поскольку гистограмма показывает все данные, но графики плотности 2 показывают данные для 1 класса, их высота также должна быть меньше. В вашем сюжете я вижу только 1 ось. Я хочу, чтобы вторая ось y справа показывала плотность. – Cheng