代码绘制交替阴影箱线图(ggplot2,R)的问题
Problem with code drawing alternately shaded boxplot (ggplot2, R)
我想在箱线图中绘制备用 shades/rectangles,类似于此 post 中的第二张图片:
下面是我的代码,以 mtcars 为例。我将 carb 和 cyl 转换为 factor 以更好地匹配我的真实数据和代码
library(ggplot2)
odd_numbers <- seq(1,33,2)
mtcars$carb <- as.factor(mtcars$carb)
mtcars$cyl <- as.factor(mtcars$cyl)
ggplot(mtcars) +
geom_boxplot(aes(x = carb, y = mpg, fill = cyl), position = position_dodge(0.9)) +
geom_rect(data = mtcars, aes(x = carb, y = mpg),
xmin= as.numeric(mtcars$carb[odd_numbers]) - 0.5,
xmax = as.numeric(mtcars$carb[odd_numbers]) + 0.5,
ymin = -Inf,
ymax = Inf, fill='grey', alpha=0.5)
我以为x-axis是数字的问题在代码中已经解决了,但是还是有问题:
Warning: Ignoring unknown aesthetics: x, y
Error: Aesthetics must be either length 1 or the same as the data (32): xmin, xmax
请问大家有什么建议吗?谢谢。
编辑
根据评论,我编辑了代码,如下所示:
- 已删除 [odd_numbers]
- 调换了 geom_boxplot
和 geom_rect
的顺序
代码:
library(ggplot2)
odd_numbers <- seq(1,33,2)
mtcars$carb <- as.factor(mtcars$carb)
mtcars$cyl <- as.factor(mtcars$cyl)
ggplot(mtcars) +
geom_rect(data = mtcars, aes(x = carb, y = mpg),
xmin= as.numeric(mtcars$carb) - 0.5,
xmax = as.numeric(mtcars$carb) + 0.5,
ymin = -Inf,
ymax = Inf, fill='grey', alpha=0.5) +
geom_boxplot(aes(x = carb, y = mpg, fill = cyl), position = position_dodge(0.9))
这会产生以下结果,所以还不是很清楚。谢谢。
与此类似的期望结果:
就像我在 中所说的,data
参数和其他参数的大小必须匹配。因此,在对 geom_rect
的调用中,仅从 mtcars
中提取 odd_numbers
。并且不需要通过子集mtcars$carb
设置xmin
和xmax
,直接使用odd_numbers
。
并交换两个 geom 以在灰色矩形上放置方框。
另请注意,我已将 odd_numbers
更改为最多 32,而不是 33。nrow(mtcars)
之后的一个值会引发错误。
library(ggplot2)
mtcars$carb <- as.factor(mtcars$carb)
mtcars$cyl <- as.factor(mtcars$cyl)
odd_numbers <- seq(1, 32, 2)
ggplot(mtcars) +
geom_rect(data = mtcars[odd_numbers, ],
xmin = odd_numbers - 0.5,
xmax = odd_numbers + 0.5,
ymin = -Inf,
ymax = Inf, fill = 'grey', alpha = 0.5) +
geom_boxplot(aes(x = carb, y = mpg, fill = cyl),
position = position_dodge(0.9))
我想在箱线图中绘制备用 shades/rectangles,类似于此 post 中的第二张图片:
下面是我的代码,以 mtcars 为例。我将 carb 和 cyl 转换为 factor 以更好地匹配我的真实数据和代码
library(ggplot2)
odd_numbers <- seq(1,33,2)
mtcars$carb <- as.factor(mtcars$carb)
mtcars$cyl <- as.factor(mtcars$cyl)
ggplot(mtcars) +
geom_boxplot(aes(x = carb, y = mpg, fill = cyl), position = position_dodge(0.9)) +
geom_rect(data = mtcars, aes(x = carb, y = mpg),
xmin= as.numeric(mtcars$carb[odd_numbers]) - 0.5,
xmax = as.numeric(mtcars$carb[odd_numbers]) + 0.5,
ymin = -Inf,
ymax = Inf, fill='grey', alpha=0.5)
我以为x-axis是数字的问题在代码中已经解决了,但是还是有问题:
Warning: Ignoring unknown aesthetics: x, y
Error: Aesthetics must be either length 1 or the same as the data (32): xmin, xmax
请问大家有什么建议吗?谢谢。
编辑
根据评论,我编辑了代码,如下所示:
- 已删除 [odd_numbers]
- 调换了 geom_boxplot
和 geom_rect
代码:
library(ggplot2)
odd_numbers <- seq(1,33,2)
mtcars$carb <- as.factor(mtcars$carb)
mtcars$cyl <- as.factor(mtcars$cyl)
ggplot(mtcars) +
geom_rect(data = mtcars, aes(x = carb, y = mpg),
xmin= as.numeric(mtcars$carb) - 0.5,
xmax = as.numeric(mtcars$carb) + 0.5,
ymin = -Inf,
ymax = Inf, fill='grey', alpha=0.5) +
geom_boxplot(aes(x = carb, y = mpg, fill = cyl), position = position_dodge(0.9))
这会产生以下结果,所以还不是很清楚。谢谢。
与此类似的期望结果:
就像我在 data
参数和其他参数的大小必须匹配。因此,在对 geom_rect
的调用中,仅从 mtcars
中提取 odd_numbers
。并且不需要通过子集mtcars$carb
设置xmin
和xmax
,直接使用odd_numbers
。
并交换两个 geom 以在灰色矩形上放置方框。
另请注意,我已将 odd_numbers
更改为最多 32,而不是 33。nrow(mtcars)
之后的一个值会引发错误。
library(ggplot2)
mtcars$carb <- as.factor(mtcars$carb)
mtcars$cyl <- as.factor(mtcars$cyl)
odd_numbers <- seq(1, 32, 2)
ggplot(mtcars) +
geom_rect(data = mtcars[odd_numbers, ],
xmin = odd_numbers - 0.5,
xmax = odd_numbers + 0.5,
ymin = -Inf,
ymax = Inf, fill = 'grey', alpha = 0.5) +
geom_boxplot(aes(x = carb, y = mpg, fill = cyl),
position = position_dodge(0.9))