在 ggplot2 中使用 facet_wrap 时,有没有办法使用向量来确定 x 轴标签的顺序和绘图颜色?
Is there a way to use vectors to determine the order of x-axis labels and plot colours when using facet_wrap in ggplot2?
我想使用 facet_wrap 绘制 3 个绘图,其中我可以根据 myOrder
设置 x 轴的顺序,并根据 myColours
设置颜色。
我有以下 data.frame
:
Cell <- c("AAA", "AAA", "AAA", "AAA", "AAA", "AAA", "AAA", "AAA", "AAA",
"AAA", "ABB", "ABB", "ABB", "ABB", "ABB", "ABB", "ABB", "ABB",
"ABB", "ABB", "ACB", "ACB", "ACB", "ACB", "ACB", "ACB", "ACB",
"ACB", "ACB", "ACB", "BAA", "BAA", "BAA", "BAA", "BAA", "BAA",
"BAA", "BAA", "BAA", "BAA", "BCA", "BCA", "BCA", "BCA", "BCA",
"BCA", "BCA", "BCA", "BCA", "BCA", "BCC", "BCC", "BCC", "BCC",
"BCC", "BCC", "BCC", "BCC", "BCC", "BCC", "CAA", "CAA", "CAA",
"CAA", "CAA", "CAA", "CAA", "CAA", "CAA", "CAA", "CCC", "CCC",
"CCC", "CCC", "CCC", "CCC", "CCC", "CCC", "CCC", "CCC", "CBA",
"CBA", "CBA", "CBA", "CBA", "CBA", "CBA", "CBA", "CBA", "CBA")
Mean <- c(8, 11, 37, 3, 30, 8, 38, 50, 9, 31, 27, 41, 16,
29, 4, 29, 28, 22, 48, 36, 13, 46, 21, 41, 38, 21,
26, 27, 49, 4, 38, 44, 49, 48, 32, 3, 6, 25, 33,
9, 9, 6, 8, 43, 21, 44, 41, 49, 32, 35, 40, 2, 41,
34, 22, 12, 0, 21, 39, 30, 49, 26, 26, 39, 4, 13,
18, 12, 9, 29, 24, 40, 38, 17, 40, 13, 30, 8, 9,
11, 40, 19, 46, 6, 49, 38, 16, 1, 34, 22)
Type <- c("1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1",
"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1",
"1", "1", "1", "1", "1", "2", "2", "2", "2", "2", "2", "2", "2",
"2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2",
"2", "2", "2", "2", "2", "2", "2", "2", "2", "3", "3", "3", "3",
"3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3",
"3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3")
TesT <- data.frame(Cell,Mean, Type)
我一直在尝试使用带有以下代码的 ggplot 绘制这些数据:
myOrder <- c("AAA", "ACB", "ABB", "BCA", "BAA", "BCC", "CBA", "CAA", "CCC")
myColours <- c("red", "blue", "green", "red", "blue", "green", rep("grey", 3))
ggplot(TesT, aes(x = Cell, y = Mean, fill = Cell)) +
theme_bw() +
stat_boxplot(geom = "errorbar") +
geom_boxplot(colour = "black") +
scale_x_discrete(breaks = myOrder, labels = myOrder) +
scale_fill_manual(limits = myOrder, values = myColours) +
facet_wrap(~Type, scales = "free_x") +
scale_shape()
这是我得到的:
我的问题是我没有设法以正确的顺序(myOrder
中的顺序)获得 x 轴。
我设法做到这一点的唯一方法是将 breaks 更改为 limits (scale_x_discrete(limits = myOrder, labels = myOrder)
)。但是,当我这样做时,我得到了所有图中所有可能的 x 类别:
我花了很多时间在这里和 google 中寻找答案,但似乎没有什么能解决我的问题。有人有什么建议吗?
将 TesT$Cell
定义为一个因素,并指定级别的顺序。
TesT$Cell <- factor(TesT$Cell, levels=myOrder)
绘图代码不需要更改。
我想使用 facet_wrap 绘制 3 个绘图,其中我可以根据 myOrder
设置 x 轴的顺序,并根据 myColours
设置颜色。
我有以下 data.frame
:
Cell <- c("AAA", "AAA", "AAA", "AAA", "AAA", "AAA", "AAA", "AAA", "AAA",
"AAA", "ABB", "ABB", "ABB", "ABB", "ABB", "ABB", "ABB", "ABB",
"ABB", "ABB", "ACB", "ACB", "ACB", "ACB", "ACB", "ACB", "ACB",
"ACB", "ACB", "ACB", "BAA", "BAA", "BAA", "BAA", "BAA", "BAA",
"BAA", "BAA", "BAA", "BAA", "BCA", "BCA", "BCA", "BCA", "BCA",
"BCA", "BCA", "BCA", "BCA", "BCA", "BCC", "BCC", "BCC", "BCC",
"BCC", "BCC", "BCC", "BCC", "BCC", "BCC", "CAA", "CAA", "CAA",
"CAA", "CAA", "CAA", "CAA", "CAA", "CAA", "CAA", "CCC", "CCC",
"CCC", "CCC", "CCC", "CCC", "CCC", "CCC", "CCC", "CCC", "CBA",
"CBA", "CBA", "CBA", "CBA", "CBA", "CBA", "CBA", "CBA", "CBA")
Mean <- c(8, 11, 37, 3, 30, 8, 38, 50, 9, 31, 27, 41, 16,
29, 4, 29, 28, 22, 48, 36, 13, 46, 21, 41, 38, 21,
26, 27, 49, 4, 38, 44, 49, 48, 32, 3, 6, 25, 33,
9, 9, 6, 8, 43, 21, 44, 41, 49, 32, 35, 40, 2, 41,
34, 22, 12, 0, 21, 39, 30, 49, 26, 26, 39, 4, 13,
18, 12, 9, 29, 24, 40, 38, 17, 40, 13, 30, 8, 9,
11, 40, 19, 46, 6, 49, 38, 16, 1, 34, 22)
Type <- c("1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1",
"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1",
"1", "1", "1", "1", "1", "2", "2", "2", "2", "2", "2", "2", "2",
"2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2",
"2", "2", "2", "2", "2", "2", "2", "2", "2", "3", "3", "3", "3",
"3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3",
"3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3", "3")
TesT <- data.frame(Cell,Mean, Type)
我一直在尝试使用带有以下代码的 ggplot 绘制这些数据:
myOrder <- c("AAA", "ACB", "ABB", "BCA", "BAA", "BCC", "CBA", "CAA", "CCC")
myColours <- c("red", "blue", "green", "red", "blue", "green", rep("grey", 3))
ggplot(TesT, aes(x = Cell, y = Mean, fill = Cell)) +
theme_bw() +
stat_boxplot(geom = "errorbar") +
geom_boxplot(colour = "black") +
scale_x_discrete(breaks = myOrder, labels = myOrder) +
scale_fill_manual(limits = myOrder, values = myColours) +
facet_wrap(~Type, scales = "free_x") +
scale_shape()
这是我得到的:
我的问题是我没有设法以正确的顺序(myOrder
中的顺序)获得 x 轴。
我设法做到这一点的唯一方法是将 breaks 更改为 limits (scale_x_discrete(limits = myOrder, labels = myOrder)
)。但是,当我这样做时,我得到了所有图中所有可能的 x 类别:
我花了很多时间在这里和 google 中寻找答案,但似乎没有什么能解决我的问题。有人有什么建议吗?
将 TesT$Cell
定义为一个因素,并指定级别的顺序。
TesT$Cell <- factor(TesT$Cell, levels=myOrder)
绘图代码不需要更改。