R有没有办法做相当于geom_jitter但密度ggplot?
R is there a way to do the equivalent of geom_jitter but for a density ggplot?
我有以下数据框,我用它来创建一个 ggplot,它是一组我用 facet_wrap.
安排的密度图
structure(list(date = c("2021-07-25", "2021-07-25", "2021-07-25",
"2021-07-25", "2021-07-25", "2021-07-25", "2021-07-25", "2021-07-25",
"2021-07-25", "2021-07-25", "2021-07-26", "2021-07-26", "2021-07-26",
"2021-07-26", "2021-07-26", "2021-07-26", "2021-07-26", "2021-07-26",
"2021-07-26", "2021-07-26", "2021-07-27", "2021-07-27", "2021-07-27",
"2021-07-27", "2021-07-27", "2021-07-27", "2021-07-27", "2021-07-27",
"2021-07-27", "2021-07-27", "2021-07-28", "2021-07-28", "2021-07-28",
"2021-07-28", "2021-07-28", "2021-07-28", "2021-07-28", "2021-07-28",
"2021-07-28", "2021-07-28", "2021-07-29", "2021-07-29", "2021-07-29",
"2021-07-29", "2021-07-29", "2021-07-29", "2021-07-29", "2021-07-29",
"2021-07-29", "2021-07-29", "2021-07-30", "2021-07-30", "2021-07-30",
"2021-07-30", "2021-07-30", "2021-07-30", "2021-07-30", "2021-07-30",
"2021-07-30", "2021-07-30", "2021-07-31", "2021-07-31", "2021-07-31",
"2021-07-31", "2021-07-31", "2021-07-31", "2021-07-31", "2021-07-31",
"2021-07-31", "2021-07-31"), Order_Type = structure(c(1L, 1L,
2L, 2L, 3L, 3L, 8L, 8L, 9L, 9L, 1L, 1L, 2L, 2L, 3L, 3L, 8L, 8L,
9L, 9L, 1L, 1L, 2L, 2L, 3L, 3L, 8L, 8L, 9L, 9L, 1L, 1L, 2L, 2L,
3L, 3L, 8L, 8L, 9L, 9L, 1L, 1L, 2L, 2L, 3L, 3L, 8L, 8L, 9L, 9L,
1L, 1L, 2L, 2L, 3L, 3L, 8L, 8L, 9L, 9L, 1L, 1L, 2L, 2L, 3L, 3L,
8L, 8L, 9L, 9L), .Label = c("group1", "group2", "group3",
"group4", "group5", "group6",
"group7", "group8", "group9"), class = "factor"),
ntf_normalized = c(1, 1, 1, 1, 1, 1, 0.5, 0.5, 0.8372252453,
0.8372252453, 0.3275361961, 0.3275361961, 1, 1, 1, 1, 0.3275361961,
0.3275361961, 0.1840258965, 0.1840258965, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 0.1603545867, 0.1603545867, 0.4950785714, 0.4950785714,
0.7142857145, 0.7142857145, 1, 1, 1, 1, 1, 1, 1, 1, 0.5526912352,
0.5526912352, 1, 1, 1, 1, 0, 0, 1, 1), ntf_first_touch = c(1,
1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1), spend = c(25.99294208,
25.99294208, 308.2773075, 308.2773075, 206.28925744, 206.28925744,
0.00398, 0.00398, 304.77034136, 304.77034136, 410.2332538,
410.2332538, 185.819275, 185.819275, 213.72726668, 213.72726668,
414.61074958, 414.61074958, 323.66596883, 323.66596883, 570.88491388,
570.88491388, 115.2426355, 115.2426355, 234.28878223, 234.28878223,
846.78931866, 846.78931866, 336.60236658, 336.60236658, 803.26558903,
803.26558903, 258.157645, 258.157645, 214.85833223, 214.85833223,
1157.49991513, 1157.49991513, 321.93666812, 321.93666812,
523.59701611, 523.59701611, 122.06332, 122.06332, 137.31790493,
137.31790493, 724.54289394, 724.54289394, 213.9509169, 213.9509169,
393.06862193, 393.06862193, 161.8394165, 161.8394165, 88.23073883,
88.23073883, 342.05106384, 342.05106384, 117.82164784, 117.82164784,
388.23691524, 388.23691524, 97.247412, 97.247412, 99.12069722,
99.12069722, 0, 0, 91.27114294, 91.27114294), names = c("cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch"), values = c(25.99294208, 25.99294208,
308.2773075, 308.2773075, 206.28925744, 206.28925744, 0.00796,
0.00398, 364.024308954985, 152.38517068, 1252.4821948984,
410.2332538, 185.819275, 185.819275, 213.72726668, 213.72726668,
1265.84711710279, 414.61074958, 1758.80664072733, 323.66596883,
570.88491388, 570.88491388, 115.2426355, 115.2426355, 234.28878223,
234.28878223, 846.78931866, 846.78931866, 336.60236658, 336.60236658,
803.26558903, 803.26558903, 258.157645, 258.157645, 214.85833223,
214.85833223, 1157.49991513, 1157.49991513, 321.93666812,
321.93666812, 523.59701611, 523.59701611, 122.06332, 122.06332,
137.31790493, 137.31790493, 4518.37960391812, 724.54289394,
432.155478462706, 213.9509169, 550.296070536911, 393.06862193,
161.8394165, 161.8394165, 88.23073883, 88.23073883, 342.05106384,
342.05106384, 117.82164784, 117.82164784, 702.448113003837,
388.23691524, 97.247412, 97.247412, 99.12069722, 99.12069722,
0, 0, 91.27114294, 91.27114294)), row.names = c(NA, -70L), groups = structure(list(
date = c("2021-07-25", "2021-07-26", "2021-07-27", "2021-07-28",
"2021-07-29", "2021-07-30", "2021-07-31"), .rows = structure(list(
1:10, 11:20, 21:30, 31:40, 41:50, 51:60, 61:70), ptype = integer(0), class = c("vctrs_list_of",
"vctrs_vctr", "list"))), row.names = c(NA, -7L), class = c("tbl_df",
"tbl", "data.frame"), .drop = TRUE), class = c("grouped_df",
"tbl_df", "tbl", "data.frame"))
ggplot(df1, aes(x = values, fill = names)) +
geom_density(alpha = 0.3) +
labs(title = "Advertising", subtitle = "CAC Distribution") +
theme(plot.title = element_text(hjust = 0.5, face = "bold")) +
theme(plot.subtitle = element_text(hjust = 0.5)) +
xlab("CAC") +
ylab("density") +
facet_wrap(~Order_Type, scales = 'free')
问题是,我发现 group2 和 group3 中发生的事情有点难以解释。这看起来像是一个错误。事实证明,group2 和 group3 的数字完全相同,因此其中一行被删除了。看起来只有其中一个名字有数据(cac_normalized 而不是 cac_first_touch)。有没有办法稍微移动一下线以查看这两个事件?我知道 geom_point 可以变成 geom_jitter 正是出于这个原因。如果我将 geom_jitter 放入我的 ggplot 中,我会收到错误消息。如果我更改 geom_density 中的 alpha,它不会执行任何操作。这里有人有想法吗?
您可以使用 after_stat()
函数对每个后续组进行微调。
library(ggplot2)
ggplot(df1, aes(x = values, fill = names)) +
geom_density(
alpha = 0.3,
aes(y = after_stat(density + 0.0001 * group))
) +
labs(title = "Advertising", subtitle = "CAC Distribution") +
theme(plot.title = element_text(hjust = 0.5, face = "bold")) +
theme(plot.subtitle = element_text(hjust = 0.5)) +
xlab("CAC") +
ylab("density") +
facet_wrap(~Order_Type, scales = 'free')
我有以下数据框,我用它来创建一个 ggplot,它是一组我用 facet_wrap.
安排的密度图structure(list(date = c("2021-07-25", "2021-07-25", "2021-07-25",
"2021-07-25", "2021-07-25", "2021-07-25", "2021-07-25", "2021-07-25",
"2021-07-25", "2021-07-25", "2021-07-26", "2021-07-26", "2021-07-26",
"2021-07-26", "2021-07-26", "2021-07-26", "2021-07-26", "2021-07-26",
"2021-07-26", "2021-07-26", "2021-07-27", "2021-07-27", "2021-07-27",
"2021-07-27", "2021-07-27", "2021-07-27", "2021-07-27", "2021-07-27",
"2021-07-27", "2021-07-27", "2021-07-28", "2021-07-28", "2021-07-28",
"2021-07-28", "2021-07-28", "2021-07-28", "2021-07-28", "2021-07-28",
"2021-07-28", "2021-07-28", "2021-07-29", "2021-07-29", "2021-07-29",
"2021-07-29", "2021-07-29", "2021-07-29", "2021-07-29", "2021-07-29",
"2021-07-29", "2021-07-29", "2021-07-30", "2021-07-30", "2021-07-30",
"2021-07-30", "2021-07-30", "2021-07-30", "2021-07-30", "2021-07-30",
"2021-07-30", "2021-07-30", "2021-07-31", "2021-07-31", "2021-07-31",
"2021-07-31", "2021-07-31", "2021-07-31", "2021-07-31", "2021-07-31",
"2021-07-31", "2021-07-31"), Order_Type = structure(c(1L, 1L,
2L, 2L, 3L, 3L, 8L, 8L, 9L, 9L, 1L, 1L, 2L, 2L, 3L, 3L, 8L, 8L,
9L, 9L, 1L, 1L, 2L, 2L, 3L, 3L, 8L, 8L, 9L, 9L, 1L, 1L, 2L, 2L,
3L, 3L, 8L, 8L, 9L, 9L, 1L, 1L, 2L, 2L, 3L, 3L, 8L, 8L, 9L, 9L,
1L, 1L, 2L, 2L, 3L, 3L, 8L, 8L, 9L, 9L, 1L, 1L, 2L, 2L, 3L, 3L,
8L, 8L, 9L, 9L), .Label = c("group1", "group2", "group3",
"group4", "group5", "group6",
"group7", "group8", "group9"), class = "factor"),
ntf_normalized = c(1, 1, 1, 1, 1, 1, 0.5, 0.5, 0.8372252453,
0.8372252453, 0.3275361961, 0.3275361961, 1, 1, 1, 1, 0.3275361961,
0.3275361961, 0.1840258965, 0.1840258965, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 0.1603545867, 0.1603545867, 0.4950785714, 0.4950785714,
0.7142857145, 0.7142857145, 1, 1, 1, 1, 1, 1, 1, 1, 0.5526912352,
0.5526912352, 1, 1, 1, 1, 0, 0, 1, 1), ntf_first_touch = c(1,
1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1), spend = c(25.99294208,
25.99294208, 308.2773075, 308.2773075, 206.28925744, 206.28925744,
0.00398, 0.00398, 304.77034136, 304.77034136, 410.2332538,
410.2332538, 185.819275, 185.819275, 213.72726668, 213.72726668,
414.61074958, 414.61074958, 323.66596883, 323.66596883, 570.88491388,
570.88491388, 115.2426355, 115.2426355, 234.28878223, 234.28878223,
846.78931866, 846.78931866, 336.60236658, 336.60236658, 803.26558903,
803.26558903, 258.157645, 258.157645, 214.85833223, 214.85833223,
1157.49991513, 1157.49991513, 321.93666812, 321.93666812,
523.59701611, 523.59701611, 122.06332, 122.06332, 137.31790493,
137.31790493, 724.54289394, 724.54289394, 213.9509169, 213.9509169,
393.06862193, 393.06862193, 161.8394165, 161.8394165, 88.23073883,
88.23073883, 342.05106384, 342.05106384, 117.82164784, 117.82164784,
388.23691524, 388.23691524, 97.247412, 97.247412, 99.12069722,
99.12069722, 0, 0, 91.27114294, 91.27114294), names = c("cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch", "cac_normalized", "cac_first_touch", "cac_normalized",
"cac_first_touch"), values = c(25.99294208, 25.99294208,
308.2773075, 308.2773075, 206.28925744, 206.28925744, 0.00796,
0.00398, 364.024308954985, 152.38517068, 1252.4821948984,
410.2332538, 185.819275, 185.819275, 213.72726668, 213.72726668,
1265.84711710279, 414.61074958, 1758.80664072733, 323.66596883,
570.88491388, 570.88491388, 115.2426355, 115.2426355, 234.28878223,
234.28878223, 846.78931866, 846.78931866, 336.60236658, 336.60236658,
803.26558903, 803.26558903, 258.157645, 258.157645, 214.85833223,
214.85833223, 1157.49991513, 1157.49991513, 321.93666812,
321.93666812, 523.59701611, 523.59701611, 122.06332, 122.06332,
137.31790493, 137.31790493, 4518.37960391812, 724.54289394,
432.155478462706, 213.9509169, 550.296070536911, 393.06862193,
161.8394165, 161.8394165, 88.23073883, 88.23073883, 342.05106384,
342.05106384, 117.82164784, 117.82164784, 702.448113003837,
388.23691524, 97.247412, 97.247412, 99.12069722, 99.12069722,
0, 0, 91.27114294, 91.27114294)), row.names = c(NA, -70L), groups = structure(list(
date = c("2021-07-25", "2021-07-26", "2021-07-27", "2021-07-28",
"2021-07-29", "2021-07-30", "2021-07-31"), .rows = structure(list(
1:10, 11:20, 21:30, 31:40, 41:50, 51:60, 61:70), ptype = integer(0), class = c("vctrs_list_of",
"vctrs_vctr", "list"))), row.names = c(NA, -7L), class = c("tbl_df",
"tbl", "data.frame"), .drop = TRUE), class = c("grouped_df",
"tbl_df", "tbl", "data.frame"))
ggplot(df1, aes(x = values, fill = names)) +
geom_density(alpha = 0.3) +
labs(title = "Advertising", subtitle = "CAC Distribution") +
theme(plot.title = element_text(hjust = 0.5, face = "bold")) +
theme(plot.subtitle = element_text(hjust = 0.5)) +
xlab("CAC") +
ylab("density") +
facet_wrap(~Order_Type, scales = 'free')
问题是,我发现 group2 和 group3 中发生的事情有点难以解释。这看起来像是一个错误。事实证明,group2 和 group3 的数字完全相同,因此其中一行被删除了。看起来只有其中一个名字有数据(cac_normalized 而不是 cac_first_touch)。有没有办法稍微移动一下线以查看这两个事件?我知道 geom_point 可以变成 geom_jitter 正是出于这个原因。如果我将 geom_jitter 放入我的 ggplot 中,我会收到错误消息。如果我更改 geom_density 中的 alpha,它不会执行任何操作。这里有人有想法吗?
您可以使用 after_stat()
函数对每个后续组进行微调。
library(ggplot2)
ggplot(df1, aes(x = values, fill = names)) +
geom_density(
alpha = 0.3,
aes(y = after_stat(density + 0.0001 * group))
) +
labs(title = "Advertising", subtitle = "CAC Distribution") +
theme(plot.title = element_text(hjust = 0.5, face = "bold")) +
theme(plot.subtitle = element_text(hjust = 0.5)) +
xlab("CAC") +
ylab("density") +
facet_wrap(~Order_Type, scales = 'free')