首页 文章

将颜色添加到boxplot - “提供给离散比例的连续值”错误

提问于
浏览
38

对我的问题可能有一个非常简单的解决方案,但我无法在网上找到满意的答案 .

使用以下命令,我能够创建以下boxplot图并将其与各个数据点重叠:

ggplot(data = MYdata, aes(x = Age, y = Richness)) + 
  geom_boxplot(aes(group=Age)) + 
  geom_point(aes(color = Age))

有几件事我想添加/更改:

1. 使用从左到右的6种不同颜色更改每个箱图的线条颜色和/或填充(取决于"Age"):

c("#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00")

我试过了

ggplot(data = MYdata, aes(Age, Richness)) + 
  geom_boxplot(aes(group=Age)) + 
  scale_colour_manual(values = c("#E69F00", "#56B4E9", "#009E73", 
                                 "#F0E442", "#0072B2", "#D55E00"))

但它会导致 "Continuous value supplied to discrete scale" 错误 .

2. 使用从左到右的6种不同颜色更改每个数据点的颜色(取决于"Age"):

c("#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00")

我试过了:

ggplot(data = MYdata, aes(Age, Richness)) + 
  geom_boxplot(aes(group=Age)) + 
  geom_point(aes(color = Age)) + 
  scale_colour_manual(values = c("#E69F00", "#56B4E9", "#009E73", 
                                 "#F0E442", "#0072B2", "#D55E00"))

但它也会导致错误:

提供给离散比例的连续值

3. 将图例中的文本更改为"0 month","1 month","3 months","6 months","9 months","12 months"

1 回答

  • 51

    首先,提供样本数据会有所帮助 . 既然你没有,这里有一些:

    MYdata <- data.frame(Age = rep(c(0,1,3,6,9,12), each=20),
                        Richness = rnorm(120, 10000, 2500))
    

    第1部分和第2部分源于同样的问题 . Age 是一个连续变量,但您尝试以离散比例使用它(通过指定特定年龄值的颜色) . 通常,比例将变量映射到视觉;对于连续年龄,每种可能的年龄值都有相应的颜色,而不仅仅是碰巧出现在数据中的颜色 . 但是,您可以同时将年龄视为某些美学的分类变量(因子) . 对于问题的第三部分,在比例描述中,您可以定义与比例中特定中断对应的特定标签 . 把这一切放在一起(并添加一些东西给你的x轴标记更像你在示例中所拥有的):

    ggplot(data = MYdata, aes(x = Age, y = Richness)) + 
      geom_boxplot(aes(fill=factor(Age))) + 
      geom_point(aes(color = factor(Age))) +
      scale_x_continuous(breaks = c(0, 1, 3, 6, 9, 12)) +
      scale_colour_manual(breaks = c("0", "1", "3", "6", "9", "12"),
                          labels = c("0 month", "1 month", "3 months",
                                     "6 months", "9 months", "12 months"),
                          values = c("#E69F00", "#56B4E9", "#009E73", 
                                     "#F0E442", "#0072B2", "#D55E00")) +
      scale_fill_manual(breaks = c("0", "1", "3", "6", "9", "12"),
                          labels = c("0 month", "1 month", "3 months",
                                     "6 months", "9 months", "12 months"),
                          values = c("#E69F00", "#56B4E9", "#009E73", 
                                     "#F0E442", "#0072B2", "#D55E00"))
    

    enter image description here

    使用此配色方案,落在箱线图内的点是不可见的(因为它们与箱线图的填充颜色相同) . 也许留下箱形凹陷并将其线条绘制成颜色会更好 .

    ggplot(data = MYdata, aes(x = Age, y = Richness)) + 
      geom_boxplot(aes(colour=factor(Age)), fill=NA) + 
      geom_point(aes(color = factor(Age))) +
      scale_x_continuous(breaks = c(0, 1, 3, 6, 9, 12)) +
      scale_colour_manual(breaks = c("0", "1", "3", "6", "9", "12"),
                          labels = c("0 month", "1 month", "3 months",
                                     "6 months", "9 months", "12 months"),
                          values = c("#E69F00", "#56B4E9", "#009E73", 
                                     "#F0E442", "#0072B2", "#D55E00"))
    

    enter image description here

    最后,考虑一下你是否真的需要对每个年龄的颜色进行不同的着色,因为它们已经被x轴很好地定义了 .

相关问题