У вас больше шансов получить хороший ответ, если вы включите некоторые образцы данных. В этом случае нетрудно создать некоторые образцы данных, которые будут примерно соответствовать форме ваших данных:
library(ggplot2)
library(dplyr)
library(tidyr)
set.seed(69)
individual <- round(rgamma(1000, 2.5, 1/11000))
household <- round(individual + runif(1000, 0, 30000))
df <- data.frame(household, individual)
Это должно дать нам несколько разумных чисел:
head(df)
#> household individual
#> 1 44277 23217
#> 2 55581 28208
#> 3 36186 17100
#> 4 39693 36174
#> 5 27371 16424
#> 6 16406 9615
И мы можем проверить, что их распределения также разумны:
hist(df$household)
hist(df$individual)
Теперь мы можем перейти к собственно ответу!
Одна из причин, по которой вы не получаете желаемый график, заключается в том, что ваши данные не в том же формате, что и данные iris
. Две составные гистограммы в связанном вопросе - это не гистограммы двух непрерывных переменных в разных столбцах, а подмножества того же столбца , окрашенного в соответствии с видами, который находится в другом столбце.
Это конечно, можно нарисовать гистограммы для обеих ваших переменных на одном графике:
ggplot(df) +
geom_histogram(aes(x = household), fill = "gold") +
geom_histogram(aes(x = individual), fill = "tomato", alpha = 0.5)
... но, конечно, они не складываются. Причина этого в том, что у вас есть две отдельные переменные, и вам нужно независимо создать из них две гистограммы. Они «ничего не знают» друг о друге, поэтому не могут складываться.
Итак, какое решение? Как и во многих других задачах построения графиков, решение включает подготовку ваших данных, чтобы они были в формате , который вы должны sh представить . Вы можете sh представить все доходы в виде одной большой гистограммы, но с частями полосок, окрашенными в зависимости от того, являются ли они доходами отдельных лиц или семейных доходов. Другими словами, вам нужно собрать все свои доходы в один столбец, а метки «домохозяйство» и «физическое лицо» должны быть в столбце группирования. Это известно как данные длинный формат , и обычно упрощает построение графиков, если вы можете преобразовать данные в этот формат.
В вашем случае это довольно просто, используя pivot_longer
из tidyr
package:
df %>% pivot_longer(cols = c("household", "individual"))
#> # A tibble: 2,000 x 2
#> name value
#> <chr> <dbl>
#> 1 household 44277
#> 2 individual 23217
#> 3 household 55581
#> 4 individual 28208
#> 5 household 36186
#> 6 individual 17100
#> 7 household 39693
#> 8 individual 36174
#> 9 household 27371
#> 10 individual 16424
#> # ... with 1,990 more rows
Это делает сюжет очень простым (я добавил пару масштабов и элементов темы, чтобы сделать его более привлекательным):
df %>%
pivot_longer(cols = c("household", "individual")) %>%
ggplot() +
geom_histogram(aes(x = value, fill = name), colour = "black") +
scale_fill_manual(values = c("gold", "dodgerblue")) +
scale_x_continuous(breaks = 0:12 * 10000) +
theme(axis.text.x = element_text(angle = 90)) +
labs(x = "Income ($)", y = "Number", title = "Income distribution")
Создано 19.06.2020 пакетом REPEX (v0.3.0)