Я использую гистограмму, чтобы визуализировать распределение различных цен на напитки, предлагаемые в магазинах, и применил заливку, чтобы отобразить долю магазинов, которые находятся в определенном состоянии на каждом уровне цен. Некоторые уровни не отображаются в заливке, а некоторые ячейки отсутствуют вообще, хотя я почти уверен, что они присутствуют в данных. Что заставило меня думать, что эта проблема существует, так это то, что я отображал средние значения по другой переменной для каждого бина, и, учитывая значение этого ярлыка, заполнение, которое я получаю, не должно быть возможным.
Настройка должна быть довольно простой; Я установил geom_histogram с x = ценой, назначил заливку (cpm.bins) и изменил масштаб оси x. Как уже упоминалось ранее, я добавил geom_text для отображения среднего числа оборотов в минуту для каждого бина. Я заметил, что что-то было не так, и запутался во фрейме данных.
Это небольшой пример фрейма данных, который я использую, но я считаю, что этого будет достаточно, чтобы продемонстрировать проблему.
library(lemon)
library(ggplot2)
df1 <- data.table::fread(
"id size price cpm.bin int.ave.cpm p.int
420 12ounce 2.39 Good 32.50 2.4
629 12ounce 2.78 Underperforming 18.00 2.8
940 12ounce 2.49 Non-purchasing 22.00 2.5
1653 12ounce 2.45 Good 22.00 2.5
1660 12ounce 2.45 Good 22.00 2.5
2561 20ounce 2.59 Underperforming 13.65 2.6
2578 20ounce 2.39 Underperforming 26.02 2.4
2580 20ounce 2.39 Underperforming 26.02 2.4
2581 20ounce 2.39 Good 26.02 2.4
2582 20ounce 2.39 Good 26.02 2.4
2583 20ounce 2.39 Good 26.02 2.4
2584 20ounce 2.39 Good 26.02 2.4
2587 20ounce 2.49 Non-purchasing 20.05 2.5
2589 20ounce 2.99 Underperforming 18.13 3.0
2599 20ounce 2.49 Non-purchasing 20.05 2.5
2600 20ounce 2.49 Underperforming 20.05 2.5
2606 20ounce 2.59 Non-purchasing 13.65 2.6
2607 20ounce 2.39 Good 26.02 2.4
2609 20ounce 2.39 Underperforming 26.02 2.4
2629 20ounce 2.49 Non-purchasing 20.05 2.5
"
)
df2 <- data.table::fread(
"id size price cpm.bin int.ave.cpm p.int
629 12ounce 2.78 Underperforming 18.00 2.8
940 12ounce 2.49 Non-purchasing 22.00 2.5
1653 12ounce 2.45 Good 22.00 2.5
1660 12ounce 2.45 Good 22.00 2.5
2561 20ounce 2.59 Underperforming 13.65 2.6
2587 20ounce 2.49 Non-purchasing 20.05 2.5
2589 20ounce 2.99 Underperforming 18.13 3.0
2599 20ounce 2.49 Non-purchasing 20.05 2.5
2600 20ounce 2.49 Underperforming 20.05 2.5
2606 20ounce 2.59 Non-purchasing 13.65 2.6
2629 20ounce 2.49 Non-purchasing 20.05 2.5
2634 20ounce 2.59 Non-purchasing 13.65 2.6
2658 20ounce 2.49 Underperforming 20.05 2.5
2665 20ounce 2.59 Non-purchasing 13.65 2.6
2671 20ounce 2.69 Non-purchasing 21.18 2.7
2673 20ounce 2.69 Good 21.18 2.7
2674 20ounce 2.69 Good 21.18 2.7
2675 20ounce 2.69 Underperforming 21.18 2.7
2676 20ounce 2.69 Good 21.18 2.7
2677 20ounce 2.69 Good 21.18 2.7"
)
при использовании этих фреймов данных для следующего ggplot, в бункере «12 унций» есть другое заполнение для бинара за 2,50 $.
ggplot(df1, aes(x = price)) +
geom_histogram(aes(fill = cpm.bin), binwidth = 0.1, position = position_fill(), stat = "bin") +
facet_rep_wrap(~size, nrow = 3, repeat.tick.labels = TRUE, scales = "free") +
scale_x_continuous(breaks = seq(0, 10, by = 0.1), labels = scales::dollar) +
geom_text(aes(x = p.int, y = 0.5, label=int.ave.cpm), size=4)
единственная разница этих подмножеств - минимально возможное значение для p.int. Для df1 минимум составляет 2,4, а для df2 минимум составляет 2,5.
Для корзины стоимостью 2,50 долл. США в разделе «12 унций» заливка должна быть 2/3 «хорошая» (синяя) и 1/3 «Непокупаемая» (красная) независимо от того, какое минимальное значение p. int is. Что происходит и как я могу это исправить, чтобы мои графики отображали значения точно и пропорционально, когда я использую весь свой фрейм данных?
Спасибо.