R ggplot&x2B;缩放大小区域,如何显示另一个cat变量的比例

R ggplot&x2B;缩放大小区域,如何显示另一个cat变量的比例,r,ggplot2,R,Ggplot2,成功绘制分类与分类数据后 ggplot(data=data_big, aes(job, education)) + geom_count() + scale_size_area(max_size = 12)+ theme_bw()+ theme(axis.text.x=element_text(angle=45,hjust=1)) 我希望添加一个维度,使这些点成为“迷你饼图”。基本上我想添加关于另一个(二进制)分类数据的信息 我已经计算了这些比例 data_big %>

成功绘制分类与分类数据后

ggplot(data=data_big, aes(job, education)) +
  geom_count() +
  scale_size_area(max_size = 12)+
  theme_bw()+
  theme(axis.text.x=element_text(angle=45,hjust=1))

我希望添加一个维度,使这些点成为“迷你饼图”。基本上我想添加关于另一个(二进制)分类数据的信息

我已经计算了这些比例

data_big %>% group_by(job,education,y) %>% summarise(n=n()) %>% mutate(rel.freq  = round(100 * n/sum(n), 2)))
给出一个类似表格(不完整tbl)

职业教育y/n q相对频率

admin. illiterate no 1 100.00
admin. basic.4y yes 10 12.99
admin. basic.4y no 67 87.01
admin. basic.6y yes 8 5.30
admin. basic.6y no 143 94.70
admin. basic.9y yes 42 8.42
admin. basic.9y no 457 91.58
admin. high.school yes 382 11.47
admin. high.school no 2947 88.53
admin. professional.course yes 49 13.50
admin. professional.course no 314 86.50
admin. university.degree yes 823 14.31
admin. university.degree no 4930 85.69
admin. unknown yes 38 15.26
admin. unknown no 211 84.74
blue-collar illiterate no 8 100.00
blue-collar basic.4y yes 123 5.31
blue-collar basic.4y no 2195 94.69
blue-collar basic.6y yes 107 7.50
blue-collar basic.6y no 1319 92.50
blue-collar basic.9y yes 240 6.62
blue-collar basic.9y no 3383 93.38
blue-collar high.school yes 94 10.71
blue-collar high.school no 784 89.29
blue-collar professional.course yes 41 9.05
blue-collar professional.course no 412 90.95
blue-collar university.degree yes 9 9.57
blue-collar university.degree no 85 90.43
blue-collar unknown yes 24 5.29
blue-collar unknown no 430 94.71
entrepreneur illiterate yes 1 50.00
entrepreneur illiterate no 1 50.00
如何将rel.freq数据添加到第一个绘图中

我所尝试的:

但不知何故,它解释了如何根据一个“初始”类别显示比例,而不是第三个类别

编辑:在与@Nathan交流后,他为我指出了一个更好的方向,我设法做到了:


只需将
geom_count
放在后面,然后使用新列执行它所做的操作:

# added a few new rows for multiple jobs
job     education   y/n q   rel.freq
admin.  illiterate  no  1   100.00
admin.  basic.4y    yes 10  12.99
admin.  basic.4y    no  67  87.01
admin.  basic.6y    yes 8   5.30
admin.  basic.6y    no  143 94.70
admin.  basic.9y    yes 42  8.42
tech    basic.9y    no  22  10
tech    basic.4y    no  58  50
也许你想要
sum(q)
在这里:

# this is all geom_count really does but it's ornery with aes(fill)
data_big <- data_big %>% group_by(education, job) %>% mutate(cnt = sum(q))

# color for effect
ggplot(data=data_big, aes(job, education)) +
    geom_point(aes(size = cnt, fill = rel.freq),shape = 21) +
    scale_size_area(max_size = 12, name = "Count")+
    scale_fill_distiller(palette = "RdBu", name = "Rel.Freq") +
    theme_bw()+
    theme(axis.text.x=element_text(angle=45,hjust=1))

我不知道如何制作迷你饼图,但使用填充美学是否可以接受?@NathanDay是的,目标是显示第三个二进制变量的比例
geom_scatterpie()
?(如果你这样做,很多小猫都会死的。)嘿,Nathan Day和thx。计数似乎很奇怪1)admin+basic.4y的计数总数为77 2)admin+basic.6y的计数总数为151Hey@Nathan Day和thx。计数似乎有点奇怪。admin+basic.4y的总数为772。admin+basic.6y的总计数为151,但是这里的区域是相同的(标签指向更低的值),使用
sum(q)
更新,但是hrbrmstr的评论可能是一个更有希望的解决方案。感谢您的初步回复,我已经找到了一个合适的答案。我所做的,和你一样,是取一个和(q)。但问题是,每一行有两行(工作与教育),一行表示是,一行表示否。幸运的是,我可以过滤表,只取带有Y的行(因为二元性,一行包含另一行的信息;)facetting也很有用
data_big <- data_big %>% group_by(education, job, `y/n`) %>% mutate(cnt = sum(q))

ggplot(data=data_big, aes(job, education)) +
    geom_point(aes(size = cnt, fill = rel.freq),shape = 21) +
    scale_size_area(max_size = 12, name = "Count")+
    scale_fill_distiller(palette = "RdBu", name = "Rel.Freq") +
    theme_bw()+
    facet_wrap(~`y/n`) +
    theme(axis.text.x=element_text(angle=45,hjust=1))