R 中 coord_flip 后的逆序
Reversed order after coord_flip in R
来自 dbv 的数据示例:
gender Sektion
1 m 5
2 m 5
3 w 3B
4 w 3B
5 w 3B
6 m 4
我有以下情节:
Sekplot <- ggplot(dbv,aes(x=Sektion,
fill=factor(gender),
stat="bin",
label = paste(round((..count..)/sum(..count..)*100), "%")))
Sekplot <- Sekplot + geom_bar(position="fill")
Sekplot <- Sekplot + scale_y_continuous(labels = percent)
Sekplot <- Sekplot + labs(title = "test")
Sekplot <- Sekplot + scale_fill_discrete(name="test", breaks=c("m", "w", "k.A."), labels=c("m", "w", "k.A."))
Sekplot <- Sekplot + geom_hline(aes(yintercept = ges, linetype = "test"), colour = "black", size = 0.75, show_guide = T)
Sekplot <- last_plot() + coord_flip()
Sekplot <- Sekplot + guides(colour = guide_legend(override.aes = list(linetype = 0 )),
fill = guide_legend(override.aes = list(linetype = 0 )),
shape = guide_legend(override.aes = list(linetype = 0 )),
linetype = guide_legend()) + theme(legend.title=element_blank())
Sekplot
输出:以错误的顺序绘制 y 轴
如何反转 "Sektion" 轴的顺序?我想在顶部有一个,在底部有 8 个。
我试过了,根据groupA$Date <- factor(groupA$Date, levels=rev(unique(groupA$Date)))
:
Sekplot <- last_plot() + coord_flip() + scale_x_reverse()
有几种口味,但找不到合适的方法。
您可以添加 scale_x_discrete
和 limits
参数来执行此操作。你可以简单地按照你想要的顺序写出限制,但是当你有很多因素水平时,这会变得复杂。相反,您可以从数据集中提取因子水平并利用 rev
将它们倒序排列。
它看起来像:
scale_x_discrete(limits = rev(levels(dbv$Sektion)))
按照@sindri_baldur 的建议,在指定美学时,添加 fct_rev() 就像这样 ggplot(dbv,aes(x=fct_rev(Sektion), fill=factor(gender),stat="bin", label = paste(round((..count..)/sum(..count..)*100), "%")))
这应该是您所需要的...从您的代码中删除 scale_x_discrete()
。
来自 dbv 的数据示例:
gender Sektion
1 m 5
2 m 5
3 w 3B
4 w 3B
5 w 3B
6 m 4
我有以下情节:
Sekplot <- ggplot(dbv,aes(x=Sektion,
fill=factor(gender),
stat="bin",
label = paste(round((..count..)/sum(..count..)*100), "%")))
Sekplot <- Sekplot + geom_bar(position="fill")
Sekplot <- Sekplot + scale_y_continuous(labels = percent)
Sekplot <- Sekplot + labs(title = "test")
Sekplot <- Sekplot + scale_fill_discrete(name="test", breaks=c("m", "w", "k.A."), labels=c("m", "w", "k.A."))
Sekplot <- Sekplot + geom_hline(aes(yintercept = ges, linetype = "test"), colour = "black", size = 0.75, show_guide = T)
Sekplot <- last_plot() + coord_flip()
Sekplot <- Sekplot + guides(colour = guide_legend(override.aes = list(linetype = 0 )),
fill = guide_legend(override.aes = list(linetype = 0 )),
shape = guide_legend(override.aes = list(linetype = 0 )),
linetype = guide_legend()) + theme(legend.title=element_blank())
Sekplot
输出:以错误的顺序绘制 y 轴
如何反转 "Sektion" 轴的顺序?我想在顶部有一个,在底部有 8 个。
我试过了,根据groupA$Date <- factor(groupA$Date, levels=rev(unique(groupA$Date)))
:
Sekplot <- last_plot() + coord_flip() + scale_x_reverse()
有几种口味,但找不到合适的方法。
您可以添加 scale_x_discrete
和 limits
参数来执行此操作。你可以简单地按照你想要的顺序写出限制,但是当你有很多因素水平时,这会变得复杂。相反,您可以从数据集中提取因子水平并利用 rev
将它们倒序排列。
它看起来像:
scale_x_discrete(limits = rev(levels(dbv$Sektion)))
按照@sindri_baldur 的建议,在指定美学时,添加 fct_rev() 就像这样 ggplot(dbv,aes(x=fct_rev(Sektion), fill=factor(gender),stat="bin", label = paste(round((..count..)/sum(..count..)*100), "%")))
这应该是您所需要的...从您的代码中删除 scale_x_discrete()
。