我遇到了一个令人烦恼的问题,但无法找到特定的解决方案。我正在尝试创建水平分组的条形图;我想要的只是获取标准的垂直条形图并将其向右旋转90度。当我使用coord_flip,它旋转的阴谋权,但翻转(反转)数据的顺序中每个组。这是一个例子:
library("ggplot2")
df <- data.frame(Group = c("A","A","A","B","B","B","C","C","C"),
Sub = c("1","2","3","1","2","3","1","2","3"),
Score = c(1,2,3,1,2,3,1,2,3))
df$Group <- factor(df$Group,
levels = c("A","B","C"),
labels = c("A","B","C"),
ordered = TRUE)
df$Sub <- factor(df$Sub,
levels = c("1","2","3"),
labels = c("1","2","3"),
ordered = TRUE)
ggplot(data = df, aes(x = Group, y = Score, fill = Sub)) +
geom_bar(stat="identity", position=position_dodge()) +
coord_flip() +
scale_x_discrete(limits = rev(levels(df$Group)))
Run Code Online (Sandbox Code Playgroud)
我可以使用以下命令按正确的顺序获取组:
scale_x_discrete(limits = rev(levels(df$Group)))
Run Code Online (Sandbox Code Playgroud)
但是,我不能拿到订单中每一组正确的。图例和数据彼此相反,在这种情况下,我想更改绘制数据的顺序,而不是图例的顺序。
我已经看到您可以通过将条形图的位置闪避设置为-.9来解决此问题,如下所示:
geom_bar(stat="identity", position=position_dodge(-.9))
Run Code Online (Sandbox Code Playgroud)
鉴于我的分组变量是字符串,因此我不确定此处提出的解决方案是否有效。
任何帮助将不胜感激!
如果您熟悉此forcats软件包,fct_rev()则在绘图时反转因子水平非常方便,并且在翻转坐标之前可以轻松地反转图例顺序/颜色映射以匹配原始版本:
library(forcats)
library(ggplot2)
# unflipped version
p1 <- ggplot(data = df,
aes(x = Group, y = Score, fill = Sub)) +
geom_col(position="dodge") #geom_col is equivalent to geom_bar(stat = "identity")
# flipped version
p2 <- ggplot(data = df,
aes(x = fct_rev(Group), y = Score, fill = fct_rev(Sub))) +
geom_col(position="dodge") +
coord_flip() +
scale_fill_viridis_d(breaks = rev, direction = -1)
gridExtra::grid.arrange(p1, p2, nrow = 1)
Run Code Online (Sandbox Code Playgroud)