Follow this post ggmosaic
Plot为呈现多路分类数据提供了极大的灵活性.然而,对标签的进一步更改变得相当具有挑战性.以下是玩具示例数据:
dat = data.frame(
Correct=c('no','yes','no','yes','no','yes','no','yes',
'no','yes','no','yes','no','yes','no','yes'),
Type=c('A','A','B','B','A','A','B','B',
'A','A','B','B','A','A','B','B'),
Level=c('1st','1st','1st','1st','2nd','2nd','2nd','2nd',
'1st','1st','1st','1st','2nd','2nd','2nd','2nd'),
Class=c('X','X','X','X','X','X','X','X',
'Y','Y','Y','Y','Y','Y','Y','Y'),
Percent=c(69.98,30.02,71.17,28.83,42.17,57.83,69.47,30.53,
18.68,81.32,26.92,73.08,13.48,86.52,22.65,77.35)
)
一个相对基本的马赛克图可以是:
require(ggplot2)
require(ggmosaic)
require(ggthemes)
mosaic1 <- ggplot(data=dat) +
geom_mosaic(aes(weight=Percent,
x=product(Type, Level),
conds=product(Class),
fill=Correct)) +
scale_fill_manual(values=c('#b2182b','#1b7837')) +
ggtitle('TITLE') +
theme_tufte(base_family='sans') +
theme(axis.text.x=element_text(angle=45, hjust=1, vjust=1, size=10),
axis.title=element_text(size=11),
legend.text=element_text(size=10),
legend.title=element_text(size=11))
mosaic1
然而,似乎不可能在各自堆叠的条形图的中点上只有"1"和"2"的标签.我可以像这样完全go 掉标签:
mosaic2 <- ggplot(data=dat) +
geom_mosaic(aes(weight=Percent,
x=product(Type, Level),
conds=product(Class),
fill=Correct)) +
scale_y_productlist(breaks=1:8, labels=NULL) +
scale_fill_manual(values=c('#b2182b','#1b7837')) +
ggtitle('TITLE') +
theme_tufte(base_family='sans') +
theme(axis.text.x=element_text(angle=45, hjust=1, vjust=1, size=10),
axis.title=element_text(size=11),
legend.text=element_text(size=10),
legend.title=element_text(size=11))
mosaic2
我怎么能
- 将面板移动到更靠近图例的位置,在轴标签之间留出更多空白(
Correct:Level
) - 使用
annotate()
添加所需的标签(即,在各自堆叠的条形图的中点添加‘1’和‘2’)
特别值得一提的是,annotate('text', label='LABEL', x=XX, y=YY, size=ZZ)
的行为很奇怪:我找不到正确的x和y值.