【发布时间】:2019-05-23 11:18:08
【问题描述】:
对于示例数据框:
df <- structure(list(year = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L), letter_group = c("A", "A", "A", "B", "B", "B", "C",
"C", "C", "C", "A", "A", "A", "B", "B", "B", "C", "C", "C", "C",
"A", "A", "A", "B", "B", "B", "C", "C", "C", "C", "C", "C", "C",
"A", "A", "A", "B", "B", "B", "C", "C", "C", "C", "C"), value = c(2L,
3L, 4L, 5L, 6L, 6L, 7L, 8L, 5L, 6L, 7L, 3L, 4L, 5L, 6L, 4L, 5L,
6L, 2L, 3L, 4L, 4L, 5L, 6L, 7L, 8L, 5L, 3L, 2L, 4L, 5L, 6L, 4L,
3L, 4L, 5L, 6L, 7L, 1L, 2L, 4L, 5L, 6L, 4L)), .Names = c("year",
"letter_group", "value"), row.names = c(NA, -44L), class = c("tbl_df",
"tbl", "data.frame"), spec = structure(list(cols = structure(list(
year = structure(list(), class = c("collector_integer", "collector"
)), letter_group = structure(list(), class = c("collector_character",
"collector")), value = structure(list(), class = c("collector_integer",
"collector"))), .Names = c("year", "letter_group", "value"
)), default = structure(list(), class = c("collector_guess",
"collector"))), .Names = c("cols", "default"), class = "col_spec"))
我正在尝试创建一个箱线图,其中包含 x 轴上的年份 - 以及按年份分组的“字母组”...
即第 1 年的 A、B、C,然后是小空间,然后是第 2 年的 A、B C,依此类推....
我有以下几点:
library(ggplot2)
p1 <- ggplot(df, aes(year, value))
p1 + geom_boxplot(aes(group=letter_group))
但这只会产生 3 个箱形图。
有人可以帮帮我吗?
【问题讨论】:
-
您的分组变量似乎不是因素。 ggplot(df, aes(as.factor(year), value, fill=as.factor(letter_group))) + geom_boxplot() 你在找什么?
-
感谢@nouse - 简单有效!完美的!在我的真实示例中,我有十个“字母组”——有没有办法指定变量的顺序? (我有 1-10,但 ggplot 正在订购它们 1、10、2-9)
-
@KT_1 你的意思是你的字母从 A 到 J 或者你的“字母”组是数字 1-10?试试
factor(letter_group, levels = LETTERS[1:10])或factor(letter_group, levels = 1:10)。 -
谢谢@Lyngbakr - 我的'letter_group'实际上被称为'deciles',运行1-10。您的第二个有用建议给出了错误: as.factor(deciles, levels = 1:10) 中的错误:未使用的参数 (levels = 1:10) 我做错了什么?
-
@KT_1 请注意,它是
factor而不是as.factor。 (有关差异的解释,请参阅 here。)