在ggplot2中重新排序图例

3

我试图重新排列ggplot中的图例,使“control”首先列出,然后按浓度从低到高排列。我已经按照我想要的图例顺序放置了数据集,并尝试使用scale_fill_discrete。

您能发现这不起作用的原因吗?

p <- ggplot(data = deviation_cloth, aes(x = day, y = Deviation))+
  geom_line(aes(color = factor(Labels)), size = 1)+
  scale_fill_discrete(breaks = c("control", "1E-3","0.01", "0.1", "1", "10"))

p + labs(color = "Conc", x = "Day", y = "Result ")

enter image description here


3
"fill"和"color"不同吗? - joran
5
谁曾经在没有留下评论的情况下对这个问题进行了点踩:那是错误的做法,学习改进问题需要反馈。请帮助我们所有人学习... - R Yoda
2
尝试使用 deviation_cloth$Labels <- factor(deviation_cloth$Labels, level = c("control", "1E-3","0.01", "0.1", "1", "10")) 代码。 - Tung
3
也许我表达得太晦涩了。你映射了“color”美学,但试图使用“scale_fill_discrete”而不是“scale_color_discrete”来调整图例。 - joran
1
@JMiller 请在你的问题中始终添加一个小的示例数据集作为 R 代码,这样我们就可以重现问题并提出答案(尽管许多用户仅通过阅读就足够聪明以识别问题;-) 谢谢! - R Yoda
3个回答

3
有两个问题:之前的评论提到过,你将标签映射到颜色,但是使用了一个填充比例尺函数。由于这是一条线,所以颜色是有意义的;只需更改为scale_color_discrete即可。
第二件事是你需要使用限制参数而不是分割参数。设置限制允许您定义包含哪些类别以及它们出现的顺序。您可以更改为scale_color_discrete(limits = c("control", "1E-3","0.01", "0.1", "1", "10")) 或者,您可以使用有序因子,并按照您想要的方式排列该变量的级别。来自tidyverse的forcats软件包中的fct_relevel使得在不必手动给出所有级别的情况下轻松完成此操作。

2

Maybe this ...

library(tidyverse)

df <-
  data_frame(
    x = c(1, 2, 3, 1, 2, 3, 1, 2, 3),
    y = c(2, 3, 4, 3, 4, 5, 4, 5, 6),
    z = c("a", "a", "a", "b", "b", "b", "c", "c", "c")
  )

ggplot(df, aes(x, y, colour = z)) +
  geom_line()

ggplot(df, aes(x, y, colour = z)) +
  geom_line() +
  guides(colour = guide_legend(reverse = T))

0

仅更改图例

今天,看起来我们也可以通过在 scale_*_*() 中添加声明 limits= 来单独改变图例顺序。

例如,已经使用以下代码为每种因素设置了所选颜色:

scale_fill_manual(
                  values= c(
                        "factor1" = "#64af38", 
                        "factor2" = "#0051e8", 
                        "factor3" = "#cc6389"
                        )
                 )

我可以强制图例顺序变为不同的顺序,
比如先是factor3,然后是factor1,最后是factor2
只需简单地更新以下内容即可

scale_fill_manual(
                  values= c(
                        "factor1" = "#64af38", 
                        "factor2" = "#0051e8", 
                        "factor3" = "#cc6389"
                        ),
                   limits= c(
                        "factor3", 
                        "factor1", 
                        "factor2"
                        )
                  ) 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接