我正在使用直方图来可视化商店中提供的饮料的各种价格的分布,并应用填充来表示每种价格水平内处于特定状态的商店的比例。填充中未显示某些级别,即使我非常确定它们已出现在数据中,也根本不存在某些垃圾箱。使我认为存在此问题的原因是,我在每个仓位上显示了另一个变量的平均值,并且给定了该标签的值,所以我最终无法实现的填充。
设置应该非常简单;我用x = price设置了geom_histogram,分配了填充(cpm.bins),并修改了x轴比例。如前所述,我添加了geom_text以显示每个bin的平均每千次展示费用。我注意到事情不对劲,并弄乱了数据框。
这是我正在使用的数据帧的一小部分,但我相信足以证明问题所在。
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。
对于“ 12盎司”部分中的$ 2.50 bin,无论p的最小值是多少,填充应为2/3“好”(蓝色)和1/3“非购买”(红色)。整数是。这是怎么回事,以及如何解决此问题,以便在使用整个数据框时,我的图可以准确并按比例显示值?
谢谢。
答案 0 :(得分:0)
为此,我将使用geom_bar()
而不是geom_histogram()
。我已经修改了代码以显示如何进行绘制。您仍然可以使用lemon
包进行所有整洁的标记等。
# plot_1 <-
ggplot(df1) +
geom_bar(aes(x = round(price, 1), fill = cpm.bin), width = 0.09) +
facet_grid(~size) +
scale_fill_manual(values = c("dodgerblue2", "coral1", "mediumseagreen")) +
xlim(2.3, 3.1) + ylim(0, 10) +
#theme(legend.position = "none") +
labs(title = "df1")
# plot_2 <-
ggplot(df2) +
geom_bar(aes(x = round(price, 1), fill = cpm.bin), width = 0.09) +
facet_grid(~size) +
scale_fill_manual(values = c("dodgerblue2", "coral1", "mediumseagreen")) +
xlim(2.3, 3.1) + ylim(0, 10) +
labs(title = "df2")
# gridExtra::grid.arrange(plot_1, plot_2, nrow = 2)