向箱线图添加颜色 - “提供给离散比例的连续值”错误

Posted

技术标签:

【中文标题】向箱线图添加颜色 - “提供给离散比例的连续值”错误【英文标题】:Add color to boxplot - "Continuous value supplied to discrete scale" error 【发布时间】:2012-06-04 01:26:27 【问题描述】:

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

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

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个月” p>

【问题讨论】:

【参考方案1】:

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

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 轴很好地定义了。

【讨论】:

非常感谢,布莱恩! (还)不知道如何在 R 中生成随机数据集。无论如何,感谢您接受这个!根据您的建议,我有一个后续问题,将这些框保留为空白。如何更改每个框的 LINE 颜色(例如变为灰色)?我用 geom_boxplot(aes(colour=factor(Age)), fill="gray80") 更改了填充颜色。然后尝试 scale_colour_manual(breaks = c("0", "1", "3", "6", "9", "12"), values = c("gray80", "gray80", "gray80", " gray80", "gray80", "gray80")) 但随后数据点也变为灰色。当然,我想保留这些点的颜色。 geom_boxplot(aes(position = factor(Age)), colour = "grey", fill = NA)geom_boxplot(aes(group = factor(Age)), colour = "grey", fill = NA) 谢谢,桑迪!仅出于我自己的理解:“position = factor(Age)”或“group = factor(Age)”做什么才能确定线条颜色? group=factor(Age) 表示Age 的每个不同值都应该有一个单独的箱线图(也就是说,为了确定有哪些不同的箱线图,应该对年龄进行分类处理)。我不知道position=factor(Age) 是做什么的。 @Dalmuti71 colour 指的是线条/边框,fill 指的是内部。使用qplot(x,y,data, geom = "polygon")geom="hist" 来清楚地显示差异。

以上是关于向箱线图添加颜色 - “提供给离散比例的连续值”错误的主要内容,如果未能解决你的问题,请参考以下文章

向箱线图添加图像注释

使用 matplotlib 向箱线图添加点散点图

Python使用matplotlib函数subplot可视化多个不同颜色的折线图在折线图上为每个数据点添加数值标签

Python使用matplotlib函数subplot可视化多个不同颜色的折线图在折线图上为每个数据点添加日期数据标签

vue中如何给charts饼图折线图区域添加指定颜色

Python使用matplotlib函数subplot可视化多个不同颜色的折线图为指定的子图添加图例信息(legend)