我正在尝试为我的7个变量中的每个变量分配颜色,并以特定的顺序设置变量。然而,geom_col代码中的'my_scale‘似乎覆盖了我的因子顺序,并将它们放回字母顺序。当我运行没有'my_scale‘行的脚本时,它们的顺序是正确的。
my_colors <- c("#1b9e77", "#d95f02", "#66A628", "#E81E89", "#7570b3", "#FFC000", "#0E85F2")
names(my_colors) <- levels(factor(c(levels(behavssec$Behaviour), levels(behavssec$Behaviour))))
my_scale <- scale_fill_manual(name = "Behaviour", values = my_colors)
behavssec$Behaviour <- factor(behavssec$Behaviour,levels = c("Burst","High energy swimming" , "Medium energy swimming", "Low energy swimming", "Travel", "Ascending", "Descending"))
ggplot(behavssec, aes(fill=Behaviour, y=n, x= SharkID)) +
geom_col(position = position_dodge2(width = 0.9, preserve = "single"))+
theme_classic ()+ my_scale +
theme (axis.text.x= element_text( size = 12))+
theme (axis.text.y = element_text( size=16))+
labs(x= "SharkID", y= "Time (second)")
具有my_scale的图形-将颜色指定给因子,但顺序错误:
因子按正确的顺序排列,但没有指定颜色:
这是我正在处理的数据:
SharkID Behaviour n
2 High energy swimming 2067
2 Medium energy swimming 3413
3 High energy swimming 16473
3 Medium energy swimming 15191
4 Burst 11
4 High energy swimming 825
4 Low energy swimming 24855
4 Medium energy swimming 465
5 High energy swimming 38
5 Low energy swimming 20063
5 Medium energy swimming 12
6 Burst 102
6 High energy swimming 21262
6 Medium energy swimming 6233
1 Ascending 1654
1 Burst 19
1 Descending 1211
1 Low energy swimming 5357
1 Travel 10685
发布于 2021-11-09 06:08:32
你的想法是对的。对于scale_fill_manual
,需要在命名矢量中提供颜色。稍微简化的示例:
代码
my_colors <- c(
"#1b9e77", "#d95f02", "#66A628", "#E81E89",
"#7570b3", "#FFC000", "#0E85F2"
)
names(my_colors) <- levels(behavssec$Behaviour)
ggplot(behavssec, aes(x = SharkID, y = n, fill = Behaviour)) +
geom_col(position = position_dodge2(width = 0.9, preserve = "single")) +
scale_fill_manual(name = "Behaviour", values = my_colors)
数据
library(ggplot2)
behavssec <- structure(list(SharkID = c(2L, 2L, 3L, 3L, 4L, 4L, 4L, 4L, 5L,
5L, 5L, 6L, 6L, 6L, 1L, 1L, 1L, 1L, 1L), Behaviour = c("High energy swimming",
"Medium energy swimming", "High energy swimming", "Medium energy swimming",
"Burst", "High energy swimming", "Low energy swimming", "Medium energy swimming",
"High energy swimming", "Low energy swimming", "Medium energy swimming",
"Burst", "High energy swimming", "Medium energy swimming", "Ascending",
"Burst", "Descending", "Low energy swimming", "Travel"), n = c(2067L,
3413L, 16473L, 15191L, 11L, 825L, 24855L, 465L, 38L, 20063L,
12L, 102L, 21262L, 6233L, 1654L, 19L, 1211L, 5357L, 10685L)), class = "data.frame", row.names = c(NA,
-19L))
behavssec <- read.table(text = "
SharkID,Behaviour,n
2,High energy swimming,2067
2,Medium energy swimming,3413
3,High energy swimming,16473
3,Medium energy swimming,15191
4,Burst,11
4,High energy swimming,825
4,Low energy swimming,24855
4,Medium energy swimming,465
5,High energy swimming,38
5,Low energy swimming,20063
5,Medium energy swimming,12
6,Burst,102
6,High energy swimming,21262
6,Medium energy swimming,6233
1,Ascending,1654
1,Burst,19
1,Descending,1211
1,Low energy swimming,5357
1,Travel,10685
", header = TRUE, sep = ",")
behavssec$Behaviour <- factor(
behavssec$Behaviour,
levels = c(
"Burst","High energy swimming",
"Medium energy swimming",
"Low energy swimming",
"Travel",
"Ascending",
"Descending"
)
)
https://stackoverflow.com/questions/69817252
复制