多条 ggplot2 图表中的排序图例
Ordering Legend in Multi-Bar ggplot2 Chart
我想要一个多条形图,水平条,其中条形颜色的图例与条形本身的顺序相同。我看过几篇对这里的示例有影响的文章,但我无法让它发挥作用。
在这个例子中,"Group"在条形图中是一个顺序,在图例中是相反的顺序。
library(ggplot2)
# create data for tidy format
Category <- c("Category1","Category2","Category3","Category4","Category5","Category1","Category2","Category3","Category4","Category5","Category1","Category2","Category3","Category4","Category5")
GroupTitle <- c("GroupA","GroupA","GroupA","GroupA","GroupA","GroupB","GroupB","GroupB","GroupB","GroupB","GroupC","GroupC","GroupC","GroupC","GroupC")
Valuelst <- list()
for (i in 1:15){
Valuelst[i] <- runif(1, min=0, max=1)
}
Valuelst <- unlist(Valuelst)
# make data frame
d <- data.frame(Category,GroupTitle,Valuelst)
# set factors and orders desired
d$Category <- factor(d$Category, levels = c("Category5","Category4","Category3","Category2","Category1"))
d$GroupTitle <- factor(d$GroupTitle, levels = c("GroupA","GroupB","GroupC"))
# make graph
ggplot(d, aes(x=Category, y=Valuelst, order = -as.numeric(GroupTitle))) + # order= -as.numeric() is one solution that I read
geom_bar(aes(fill=GroupTitle), stat="identity", position="dodge") +
coord_flip() +
scale_fill_manual("Legenda", values = c("GroupC" = "#deebf7", "GroupB" = "#3182bd", "GroupA" = "#9ecae1")) # scale_fill_manual is another I read
我在代码中的几个地方评论了我在其他地方看到的解决方案。也就是说,我已经确保组是一个因素,设置该因素的顺序,使用 order = -as.numeric(GroupTitle)
,并尝试 scale_fill_manual
,但都没有效果。
我使用了 ggpubr
库。诀窍是 -0.7
for position_dodge()
,它使条形反转。您也可以使用
library(ggplot2)
library(ggpubr)
# create data for tidy format
Category <- paste0("Category", rep(1:5,3))
GroupTitle <- paste0("Group", rep(LETTERS[1:3], each=5))
Valuelst <- runif(15, min=0, max=1)
# make data frame - factor is default for strings
d <- data.frame(Category, GroupTitle, Valuelst)
# make graph
ggbarplot(d,x="Category", y="Valuelst", fill="GroupTitle", legend = "right",
orientation = "horiz", position=position_dodge(-.7),
order = c("Category5","Category4","Category3","Category2","Category1")) +
scale_fill_manual("Legenda", values = c("GroupC" = "#deebf7", "GroupB" = "#3182bd", "GroupA" = "#9ecae1"))
你也可以在geom_bar()
中使用position=position_dodge(-.9)
来达到同样的效果。
ggplot(d, aes(x=Category, y=Valuelst, order = -as.numeric(GroupTitle))) +
geom_bar(aes(fill=GroupTitle), stat="identity", position=position_dodge(-.9)) +
coord_flip() +
scale_fill_manual("Legenda", values = c("GroupC" = "#deebf7", "GroupB" = "#3182bd", "GroupA" = "#9ecae1"))
你几乎和 scale_fill_manual
在一起了。
scale_fill_manual("Legenda",
values = c("GroupA" = "#9ecae1", "GroupB" = "#3182bd", "GroupC" = "#deebf7"),
breaks = c("GroupC", "GroupB", "GroupA"))
breaks
参数将设置顺序。
选项 1 - 顺序:C、B 和 A
要反转图例标签,您只需添加:guides(fill = guide_legend(reverse = TRUE))
。保持条形的原始顺序:C、B 和 A。
ggplot(d, aes(x = Category,
y = Valuelst,
fill = GroupTitle)) +
geom_bar(stat = "identity", position = "dodge") +
coord_flip() +
scale_fill_manual("Legenda",
values = c(
"GroupC" = "#deebf7",
"GroupB" = "#3182bd",
"GroupA" = "#9ecae1"
)) +
guides(fill = guide_legend(reverse = TRUE))
选项 2 - 顺序:A、B 和 C
要颠倒条形的顺序,我们只需在绘图前重新排列级别即可。
d$GroupTitle <- factor(d$GroupTitle, levels = c("GroupC","GroupB","GroupA"))
# make graph
ggplot(d, aes(x = Category,
y = Valuelst,
fill = GroupTitle)) +
geom_bar(stat = "identity", position = "dodge") +
coord_flip() +
scale_fill_manual("Legenda",
values = c(
"GroupC" = "#deebf7",
"GroupB" = "#3182bd",
"GroupA" = "#9ecae1"
)) +
guides(fill=guide_legend(reverse=TRUE))
我想要一个多条形图,水平条,其中条形颜色的图例与条形本身的顺序相同。我看过几篇对这里的示例有影响的文章,但我无法让它发挥作用。
在这个例子中,"Group"在条形图中是一个顺序,在图例中是相反的顺序。
library(ggplot2)
# create data for tidy format
Category <- c("Category1","Category2","Category3","Category4","Category5","Category1","Category2","Category3","Category4","Category5","Category1","Category2","Category3","Category4","Category5")
GroupTitle <- c("GroupA","GroupA","GroupA","GroupA","GroupA","GroupB","GroupB","GroupB","GroupB","GroupB","GroupC","GroupC","GroupC","GroupC","GroupC")
Valuelst <- list()
for (i in 1:15){
Valuelst[i] <- runif(1, min=0, max=1)
}
Valuelst <- unlist(Valuelst)
# make data frame
d <- data.frame(Category,GroupTitle,Valuelst)
# set factors and orders desired
d$Category <- factor(d$Category, levels = c("Category5","Category4","Category3","Category2","Category1"))
d$GroupTitle <- factor(d$GroupTitle, levels = c("GroupA","GroupB","GroupC"))
# make graph
ggplot(d, aes(x=Category, y=Valuelst, order = -as.numeric(GroupTitle))) + # order= -as.numeric() is one solution that I read
geom_bar(aes(fill=GroupTitle), stat="identity", position="dodge") +
coord_flip() +
scale_fill_manual("Legenda", values = c("GroupC" = "#deebf7", "GroupB" = "#3182bd", "GroupA" = "#9ecae1")) # scale_fill_manual is another I read
我在代码中的几个地方评论了我在其他地方看到的解决方案。也就是说,我已经确保组是一个因素,设置该因素的顺序,使用 order = -as.numeric(GroupTitle)
,并尝试 scale_fill_manual
,但都没有效果。
我使用了 ggpubr
库。诀窍是 -0.7
for position_dodge()
,它使条形反转。您也可以使用
library(ggplot2)
library(ggpubr)
# create data for tidy format
Category <- paste0("Category", rep(1:5,3))
GroupTitle <- paste0("Group", rep(LETTERS[1:3], each=5))
Valuelst <- runif(15, min=0, max=1)
# make data frame - factor is default for strings
d <- data.frame(Category, GroupTitle, Valuelst)
# make graph
ggbarplot(d,x="Category", y="Valuelst", fill="GroupTitle", legend = "right",
orientation = "horiz", position=position_dodge(-.7),
order = c("Category5","Category4","Category3","Category2","Category1")) +
scale_fill_manual("Legenda", values = c("GroupC" = "#deebf7", "GroupB" = "#3182bd", "GroupA" = "#9ecae1"))
你也可以在geom_bar()
中使用position=position_dodge(-.9)
来达到同样的效果。
ggplot(d, aes(x=Category, y=Valuelst, order = -as.numeric(GroupTitle))) +
geom_bar(aes(fill=GroupTitle), stat="identity", position=position_dodge(-.9)) +
coord_flip() +
scale_fill_manual("Legenda", values = c("GroupC" = "#deebf7", "GroupB" = "#3182bd", "GroupA" = "#9ecae1"))
你几乎和 scale_fill_manual
在一起了。
scale_fill_manual("Legenda",
values = c("GroupA" = "#9ecae1", "GroupB" = "#3182bd", "GroupC" = "#deebf7"),
breaks = c("GroupC", "GroupB", "GroupA"))
breaks
参数将设置顺序。
选项 1 - 顺序:C、B 和 A
要反转图例标签,您只需添加:guides(fill = guide_legend(reverse = TRUE))
。保持条形的原始顺序:C、B 和 A。
ggplot(d, aes(x = Category,
y = Valuelst,
fill = GroupTitle)) +
geom_bar(stat = "identity", position = "dodge") +
coord_flip() +
scale_fill_manual("Legenda",
values = c(
"GroupC" = "#deebf7",
"GroupB" = "#3182bd",
"GroupA" = "#9ecae1"
)) +
guides(fill = guide_legend(reverse = TRUE))
选项 2 - 顺序:A、B 和 C
要颠倒条形的顺序,我们只需在绘图前重新排列级别即可。
d$GroupTitle <- factor(d$GroupTitle, levels = c("GroupC","GroupB","GroupA"))
# make graph
ggplot(d, aes(x = Category,
y = Valuelst,
fill = GroupTitle)) +
geom_bar(stat = "identity", position = "dodge") +
coord_flip() +
scale_fill_manual("Legenda",
values = c(
"GroupC" = "#deebf7",
"GroupB" = "#3182bd",
"GroupA" = "#9ecae1"
)) +
guides(fill=guide_legend(reverse=TRUE))