首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中创建镶嵌图

在R中创建镶嵌图
EN

Stack Overflow用户
提问于 2020-03-26 23:23:03
回答 2查看 1.4K关注 0票数 1

我试过很多东西,但无法使马赛克情节奏效。我从一个数据框架开始:

代码语言:javascript
复制
df = data.frame(effect = c("no","no", "yes", "yes"),
            sex = c("f","m","f","m"),
            n = c(8,3,8,12))

df$effect <- factor((df$effect), levels=c("yes", "no"))
df$sex <- factor(df$sex)

我试过了

代码语言:javascript
复制
windows(width=3.5, height=3.5 )
ggplot(df) +
geom_bar(aes(effect, fill = sex))

我尝试了另一个场景:

代码语言:javascript
复制
library(ggmosaic)
windows(width=3.5, height=3.5 )
ggplot(df) + 
geom_mosaic(aes(x = product(effect), fill = sex)) + 
labs(x = "effect", y = "number")

我尝试了另一种方法:

代码语言:javascript
复制
library("graphics")
windows(width=3.5, height=3.5 )
with(df,
mosaicplot(table(effect, sex), color=TRUE))

不管我做了什么,牢房里的数字在图上都没有正确的表示。我不知道我做错了什么.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-26 23:46:44

您需要在绘图的定义中包含n的值。另外,由于您要对值进行求和,所以geom_col()geom_barr()更合适。为了让条形填充任一区域,将position=“填充”添加到几何定义中。

代码语言:javascript
复制
df = structure(list(effect = structure(c(2L, 2L, 1L, 1L), .Label = c("yes", 
     "no"), class = "factor"), sex = structure(c(1L, 2L, 1L, 2L), 
      .Label = c("f",  "m"), class = "factor"), n = c(8, 3, 8, 12)), 
      row.names = c(NA, -4L), class = "data.frame")

ggplot(df, aes(effect, y=n, fill = sex)) +
  geom_col(position="fill")

若要更改条形图的宽度,可以尝试如下所示:

代码语言:javascript
复制
library(dplyr)
widths<-df %>% group_by(effect) %>% summarize(value=sum(n)) %>% mutate(value=value/sum(value))
ggplot(df, aes(effect, y=n, fill = sex)) +
  geom_col(position="fill", width=1.8*rep(widths$value, each=2))
票数 1
EN

Stack Overflow用户

发布于 2020-03-27 00:27:20

您可以使用mosaicplot函数从图形。但是,数据需要采用“表”或原始数据格式,而不是聚合格式。您的数据是聚合的,因此我们需要使用xtabs“去聚合”它。

代码语言:javascript
复制
xtab <- xtabs(n~sex+effect, data=df)
   effect
sex yes no
  f   8  8
  m  12  3

然后,以下任何一项都将有效。

代码语言:javascript
复制
mosaicplot(xtab, main="Sex v Effect", col=TRUE)
mosaicplot(~sex+effect, data=xtab, main="Sex v Effect", col=TRUE)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60877712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档