41

我的问题可能有一个非常简单的解决方案,但我在网上找不到令人满意的答案。

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

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

我想添加/更改几件事:

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

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 种不同颜色更改每个数据点的颜色(取决于“年龄”):

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个月”、“1个月”、“3个月”、“6个月”、“9个月”、“12个月”

4

1 回答 1

54

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

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"))

在此处输入图像描述

使用此配色方案,箱线图中的点不可见(因为它们与箱线图的填充颜色相同)。也许将箱线图留空并用颜色绘制线条会更好。

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"))

在此处输入图像描述

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

于 2012-05-29T21:03:56.393 回答