Наложение двух гистограмм с разными строками с помощью ggplot2 - PullRequest
0 голосов
/ 29 апреля 2020

Я хочу создать график с двумя наложенными гистограммами для двух нормальных распределений.

Например:

dist1 <- rnorm(1000, 35, 3)
dist2 <- rnorm(1200, 40, 5)

Дело в том, что, как вы видите, распределения имеют разное число строк.

Когда вы пытаетесь наложить эти две гистограммы, появляется ошибка.

Также вы не можете переставить оба распределения в одном и том же фрейме данных по одной и той же причине.

Я думал о заполнении наименьшего распределения значениями NULL, но это, кажется, приносит больше проблем, чем решает.

Ответы [ 2 ]

2 голосов
/ 29 апреля 2020

Я использовал data.table и ggplot2 .

Пожалуйста, посмотрите. Хитрость заключается в том, чтобы объединить два объекта в один data.frame.

library(data.table)
library(ggplot2)

dist1 <- rnorm(1000, 35, 3)
dist2 <- rnorm(1200, 40, 5)

dt1 <- data.table( id = rep("dist1", length(dist1) ),
                  dist = dist1 )
dt2 <- data.table( id = rep("dist2", length(dist2) ),
                  dist = dist2 )

dt <- rbindlist( list( dt1, dt2 ) )

ggplot( dt, aes( x = dist, fill = id ) ) +
  geom_histogram(alpha = .3)
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Создано в 2020-04-29 пакетом представ. (v0.3.0)

2 голосов
/ 29 апреля 2020

Вы можете создать «длинный» data.frame и построить его с помощью ggplot2:

set.seed(1)
library(ggplot2)
dist1 <- rnorm(1000, 35, 3)
dist2 <- rnorm(1200, 40, 5)

df <- data.frame(variable = c(rep("dist1", length(dist1)), 
                              rep("dist2", length(dist2))), 
                 value=c(dist1, dist2))
ggplot(df, aes(x=value, fill=variable))+
    geom_histogram()
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Вы также можете рассмотреть графики плотности, так как их легче наложить :

ggplot(df, aes(x=value, fill=variable))+
    geom_density(alpha=.5)

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