【问题标题】:Controlling colors from 2 different factors in one ggplot在一个 ggplot 中控制来自 2 个不同因素的颜色
【发布时间】:2017-07-28 11:04:23
【问题描述】:

基本上,我试图叠加两个不同的图,每个图都由不同的因子着色,并希望保留对着色顺序的控制(即,不让 ggplot 决定因子水平的顺序)。

例如,假设我有这两个不同的数据框:

labels1 <- factor(rep(LETTERS[1:2], each=5), levels=LETTERS[2:1])
dfp1 <- data.frame(L1=labels1, x=1:10, y=rep(1:2, each=5))

labels2 <- factor(rep(letters[1:2], each=5), levels=letters[2:1])
dfp2 <- data.frame(L2=labels2, x=(1:10), y=rep(c(0.25, 0.75), each=5))

我想绘制第一个的 ECDF,按 L1 着色:

p <- 
   ggplot(dfp1, aes(x=x, y=y, color=L1)) +
   stat_ecdf()

这会生成一个图,其中 B 的颜色位于 A 之前:

如果我知道要在此之上覆盖第二个数据帧的点,我可以这样做

p + geom_point(data=dfp2, mapping=aes(x=x, y=y, color=L2))

但随后 ggplot 将 L1 和 L2 这两个因素合二为一,并在其级别上使用字母顺序:

我有几个这样的图要制作,点的标签会发生变化,所以这种重构完全改变了图之间元素的颜色。我想说服 ggplot 将每个因子的水平保持在给定的顺序,并保持因子的顺序,以便根据

进行着色
factor(c(as.character(labels1), as.character(labels2)),
       levels=c(levels(labels1), levels(labels2)))

我该怎么做?

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    您可以使用命名的调色板来维持特定的顺序,如下所示:

    cust <- c("purple", "orange", "green", "brown")
    names(cust) <- c(levels(labels1), levels(labels2))
    
    p + geom_point(data=dfp2, mapping=aes(x=x, y=y, color=L2)) +
        scale_color_manual(values = cust)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 2015-04-16
      • 1970-01-01
      • 1970-01-01
      • 2018-10-04
      • 2021-10-02
      • 2020-07-10
      相关资源
      最近更新 更多