我已经试着熟悉如何使用ggmosaic的geom_mosaic()命令在R中制作马赛克图。
我的问题是,我希望各地区按各地区老年人的比例排序,而不是像现在那样按姓名排序。有什么帮助吗?
我不太习惯于使用各种因素,但我尝试使用fct_reorder()命令做不同的事情,没有任何结果。
下面是一个示例数据集(不是我使用的实际数据集)和我到目前为止所做的代码:
# 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命令中执行。
新代码(过于冗长,无法估计老年人所占份额)
# 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()发布于 2021-03-27 16:49:18
用这段代码来设置顺序,
df$age <- factor(df$age, levels = c("senior","adult","young"))https://stackoverflow.com/questions/66833179
复制相似问题