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

我怎么能

  1. 将面板移动到更靠近图例的位置,在轴标签之间留出更多空白(Correct:Level)
  2. 使用annotate()添加所需的标签(即,在各自堆叠的条形图的中点添加‘1’和‘2’)

特别值得一提的是,annotate('text', label='LABEL', x=XX, y=YY, size=ZZ)的行为很奇怪:我找不到正确的x和y值.

An example fig

推荐答案

要减少空白,请删除或减少x刻度在两侧或仅一侧的扩展.在下面的代码中,我还减少了y标度的展开.

关于标签,至少对于您的示例数据,y标尺上的堆叠条形图的中点是.25和.75,因此您可以通过使用scale_y_productlist设置分隔符和标签来简单地添加所需的标签,如下所示:

library(ggmosaic)

mosaic1 +
  scale_y_productlist(
    breaks = c(.25, .75),
    labels = c("1st", "2nd"),
    expand = c(0, 0.01)
  ) +
  scale_x_productlist(
    expand = c(0, 0.01)
  )

enter image description here

R相关问答推荐

使用gggplot 2在R中重新调整面板和y轴文本大小

如何在R中正确对齐放射状图中的文本

列出用m n个值替换来绘制n个数字的所有方法(i.o.w.:R中大小为n的集合的所有划分为m个不同子集)

ggplot geom_smooth()用于线性回归虚拟变量-没有回归线

格点中指数、双曲和反双曲模型曲线的正确绘制

迭代通过1个长度的字符串长字符R

如何指定我的函数应该查找哪个引用表?

您是否可以将组添加到堆叠的柱状图

函数可以跨多个列搜索多个字符串并创建二进制输出变量

基于Key->Value数据帧的基因子集相关性提取

使用不同的定性属性定制主成分分析中点的 colored颜色 和形状

使用geom_iles在一个切片中包含多个值

R中治疗序列的相对时间指数

如何显示准确的p值而不是<;0.001*?

在不重复主题的情况下重新排列组

使用dqur在不同变量上创建具有多个条件的变量

在R中使用ggraph包排列和着色圆

从单个html段落中提取键-值对

使用nls()函数的非线性模型的半正态图

具有某些列的唯一值的数据帧