首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中镶嵌图的重排因子与geom_mosaic()

R中镶嵌图的重排因子与geom_mosaic()
EN

Stack Overflow用户
提问于 2021-03-27 15:46:37
回答 1查看 491关注 0票数 0

我已经试着熟悉如何使用ggmosaic的geom_mosaic()命令在R中制作马赛克图。

我的问题是,我希望各地区按各地区老年人的比例排序,而不是像现在那样按姓名排序。有什么帮助吗?

我不太习惯于使用各种因素,但我尝试使用fct_reorder()命令做不同的事情,没有任何结果。

下面是一个示例数据集(不是我使用的实际数据集)和我到目前为止所做的代码:

代码语言:javascript
复制
# install.packages(c("ggplot2", "ggmosaic"))
library(ggplot2)
library(ggmosaic)
  
# Make data set      
region <- c("Oslo", "Oslo", "Oslo", "Viken", "Viken", "Viken", 
            "Nordland", "Nordland", "Nordland")
age    <- c("young", "adult", "senior", "young", "adult", "senior",
            "young", "adult", "senior")
pop    <- c(145545, 462378, 89087, 299548, 729027, 223809, 52156, 136872, 51317)
df     <- data.frame(region, age, pop)

# Make mosaic plot
ggplot(data = df) +
  geom_mosaic(aes(x = product(age, region), fill = age, weight = pop)) +
  coord_flip() +
  theme_minimal()

更新:对不起,如果我不清楚,但我想要的是:

镶嵌图

如果区域按老年人比例而不是按默认顺序排列/排序,如下所示:

镶嵌图未排序

我以一种“不整洁”的方式使用fct_reorder()命令来解决这个问题,而不是作为管道中变异命令的一部分。我不知道这意味着什么不同。另一个注释,fct_reorder()命令在常规的ggplot2 geom_中工作得很好.命令,但不可以(至少按照我尝试过的方式)在ggmosaic包的geom_mosaic命令中执行。

新代码(过于冗长,无法估计老年人所占份额)

代码语言:javascript
复制
# install.packages(c("ggplot2", "ggmosaic"))
library(ggplot2)
library(ggmosaic)

# Make data set      
region <- c("Oslo", "Oslo", "Oslo", "Viken", "Viken", "Viken", 
            "Nordland", "Nordland", "Nordland")
age    <- c("young", "adult", "senior", "young", "adult", "senior",
            "young", "adult", "senior")
pop    <- c(145545, 462378, 89087, 299548, 729027, 223809, 52156, 136872, 51317)
df     <- data.frame(region, age, pop)

df <- df %>% 
  group_by(region, age) %>%
  summarise(pop = sum(pop)) %>% 
  mutate(senior = case_when(age == "senior" ~ pop))

# Get total population of each region
df_tot <- df %>% 
  group_by(region) %>% 
  summarise(poptot = sum(pop),
            senior = median(senior, na.rm = TRUE)) %>% 
  mutate(senior_share = senior / poptot * 100) %>% 
  select(region, senior_share)

# Estimate senior share of each region
# Change order of regions
df <- df %>% 
  left_join(df_tot, by = "region") #%>% 

# Fix the factors
df$region <- fct_reorder(df$region, df$senior_share)
df$age <- factor(df$age, levels = c("young", "adult", "senior"))

# Make mosaic plot
ggplot(data = df) +
  geom_mosaic(aes(x = product(age, region), fill = age, weight = pop)) +
  coord_flip() +
  theme_minimal()
EN

回答 1

Stack Overflow用户

发布于 2021-03-27 16:49:18

用这段代码来设置顺序,

代码语言:javascript
复制
df$age <- factor(df$age, levels = c("senior","adult","young"))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66833179

复制
相关文章

相似问题

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