I want to plot a bar for each x value and each group, where each bar is individually filled with a vertical gradient by the number of observations with a same y value.
For more context: I wish to explain how the number of alive sons g="a" or born sons g="b" affects the salary y of an individual. For that i first plotted this scatter plot:
ggplot(df, aes(y=y, x=x, color=g)) + 
  geom_point(position=position_dodge(0.2), alpha=0.3) +
  geom_smooth(method="lm", alpha=0.3)
As there is an alpha argument, places with lots of dots get darker, giving a sense of density. But i'd like to directly plot that density with something like:
I guess that this could be described as "a violin plot, but instead of larger figure we have a darker color". My question is how to get something like that.
The most important feature is the fill. The bars can have a non-fixed size, and if there's another geom that has this feature i'm probably good with it.
I came across this question (Create barplot in R with gradient based on density) were you'd create a rect and fill it with stat_ydensity, but in that case, he only had a x variable and not a group one, so i couldn't find how to apply it to my problem.
What I tried:
Changing the geom to "bar" but got this:
ggplot(df, aes(y=y, x=x, color=g)) +
  stat_ydensity(geom="bar", aes(fill=stat(density)))
Counting how many observations with the same x and g had a y value with
library(dplyr)
df <- df %>% group_by_all() %>% summarise(COUNT = n())
And then try to pass COUNT as the fill argument to some geom, but also didn't got good results.
Data:
df <- structure(list(y = c(1000, 1000, 510, 510, 650, 650, 510, 510, 
350, 350, 800, 800, 800, 800, 150, 150, 2000, 2000, 800, 800, 
600, 600, 1700, 1700, 600, 600, 600, 600, 400, 400, 1000, 1000, 
600, 600, 600, 600, 700, 700, 510, 510, 0, 0, 800, 800, 250, 
250, 730, 730, 800, 800, 2500, 2500, 750, 750, 800, 800, 2500, 
2500, 1500, 1500, 1000, 1000, 3800, 3800, 3600, 3600, 1000, 1000, 
320, 320, 1450, 1450, 600, 600, 800, 800, 1500, 1500, 1200, 1200, 
600, 600, 510, 510, 600, 600, 1050, 1050, 1300, 1300, 500, 500, 
2000, 2000, 750, 750, 1260, 1260, 1500, 1500, 510, 510, 510, 
510, 4000, 4000, 4000, 4000, 960, 960, 820, 820, 400, 400, 1600, 
1600, 510, 510, 1200, 1200, 600, 600, 900, 900, 1010, 1010, 3500, 
3500, 3500, 3500, 2700, 2700, 1100, 1100, 700, 700, 560, 560, 
1700, 1700, 470, 470, 1500, 1500, 2000, 2000, 7000, 7000, 2000, 
2000, 2000, 2000, 700, 700, 600, 600, 1200, 1200, 850, 850, 510, 
510, 600, 600, 2000, 2000, 1500, 1500, 1000, 1000, 1500, 1500, 
1500, 1500, 5000, 5000, 5000, 5000, 5000, 5000, 800, 800, 200, 
200, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 2000, 2000, 
420, 420, 250, 250, 510, 510, 600, 600, 1510, 1510, 1500, 1500, 
998, 998, 870, 870, 900, 900, 900, 900, 5500, 5500, 2800, 2800, 
2000, 2000, 510, 510, 905, 905, 1020, 1020, 1030, 1030, 1020, 
1020, 2040, 2040, 2800, 2800, 1800, 1800, 650, 650, 2000, 2000, 
700, 700, 800, 800, 900, 900, 1300, 1300, 600, 600, 400, 400, 
800, 800, 700, 700, 510, 510, 460, 460, 223, 223, 1000, 1000, 
600, 600, 510, 510, 510, 510, 720, 720, 650, 650, 800, 800, 410, 
410, 2000, 2000, 1020, 1020, 940, 940, 1040, 1040, 3000, 3000, 
3000, 3000, 1200, 1200, 1300, 1300, 600, 600, 600, 600, 2100, 
2100, 700, 700, 3300, 3300, 500, 500, 350, 350, 1200, 1200, 2200, 
2200, 800, 800, 700, 700, 1080, 1080, 200, 200, 1400, 1400, 2500, 
2500, 5000, 5000, 800, 800, 572, 572, 832, 832, 2000, 2000, 510, 
510, 1900, 1900, 640, 640, 800, 800, 2000, 2000, 510, 510, 510, 
510, 510, 510, 510, 510, 715, 715, 700, 700, 500, 500, 1000, 
1000, 1000, 1000, 800, 800, 380, 380, 510, 510, 510, 510, 330, 
330, 330, 330, 330, 330, 1700, 1700, 800, 800, 1500, 1500, 2500, 
2500, 150, 150, 188, 188, 1000, 1000, 400, 400, 1300, 1300, 660, 
660, 2000, 2000, 1000, 1000, 1500, 1500, 950, 950, 1000, 1000, 
500, 500, 1610, 1610, 600, 600, 650, 650, 1670, 1670, 600, 600, 
800, 800, 800, 800, 412, 412, 800, 800, 2000, 2000, 1000, 1000, 
1600, 1600, 2000, 2000, 800, 800, 800, 800, 2500, 2500, 500, 
500, 1200, 1200, 800, 800, 800, 800, 2200, 2200, 2000, 2000, 
600, 600, 500, 500, 3000, 3000, 600, 600, 1000, 1000, 250, 250, 
1000, 1000, 1200, 1200, 1500, 1500, 2500, 2500, 400, 400, 8000, 
8000, 1800, 1800, 1700, 1700, 2000, 2000, 900, 900, 600, 600, 
700, 700, 255, 255, 545, 545, 2800, 2800, 1500, 1500, 600, 600, 
900, 900), g = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L), .Label = c("a", 
"b"), class = "factor"), x = c(0, 0, 1, 1, 0, 0, 5, 5, 0, 0, 
0, 0, 0, 0, 2, 2, 0, 0, 4, 4, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 
2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 3, 3, 3, 3, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 5, 5, 
0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 0, 0, 0, 
0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 
0, 0, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 3, 3, 0, 0, 0, 0, 6, 5, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
1, 1, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 6, 
5, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 3, 3, 4, 4, 
2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 0, 0, 0, 
0, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 
0, 0, 2, 2, 0, 0, 3, 3, 0, 0, 0, 0, 2, 2, 0, 0, 1, 1, 0, 0, 0, 
0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 
3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 5, 5, 3, 3, 0, 0, 0, 0, 
1, 1, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 
2, 0, 0, 0, 0, 1, 1, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 
0, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 
0, 0, 1, 1, 3, 3, 3, 3, 0, 0, 2, 2, 0, 0, 1, 1, 0, 0, 0, 0, 1, 
1, 0, 0, 1, 1, 2, 2)), row.names = c(NA, -500L), class = c("tbl_df", 
"tbl", "data.frame"))



