首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在ggplot2中设置因子顺序和颜色

如何在ggplot2中设置因子顺序和颜色
EN

Stack Overflow用户
提问于 2021-11-02 13:42:46
回答 1查看 52关注 0票数 1

我正在尝试为我的7个变量中的每个变量分配颜色,并以特定的顺序设置变量。然而,geom_col代码中的'my_scale‘似乎覆盖了我的因子顺序,并将它们放回字母顺序。当我运行没有'my_scale‘行的脚本时,它们的顺序是正确的。

代码语言:javascript
运行
AI代码解释
复制
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的图形-将颜色指定给因子,但顺序错误:

因子按正确的顺序排列,但没有指定颜色:

这是我正在处理的数据:

代码语言:javascript
运行
AI代码解释
复制
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
EN

回答 1

Stack Overflow用户

发布于 2021-11-09 06:08:32

你的想法是对的。对于scale_fill_manual,需要在命名矢量中提供颜色。稍微简化的示例:

代码

代码语言:javascript
运行
AI代码解释
复制
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)

数据

代码语言:javascript
运行
AI代码解释
复制
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"
    )
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69817252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档