Cur*_*is 3 r ggplot2 facet-wrap
我正在尝试使用 ggplot2 中的 labeller 函数来标记多面图。当我运行我的代码时,我没有收到任何错误或警告(我知道这并不总是意味着一切都像我想的那样工作),但是我没有将预定义的标签应用于绘图,而是得到“NA”作为情节标签。我的数据的一个小子样本是:
w <- structure(list(Var1 = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L,
2L), .Label = c("0", "1"), class = "factor"), Var2 = structure(c(1L,
1L, 2L, 2L, 1L, 1L, 2L, 2L), .Label = c("0", "1"), class = "factor"),
Freq = c(9L, 18L, 7L, 12L, 11L, 12L, 15L, 7L), Index = c(1L,
1L, 1L, 1L, 2L, 2L, 2L, 2L), ComboCode = c("00", "10", "01",
"11", "00", "10", "01", "11"), Var1Name = c("hibernate",
"hibernate", "hibernate", "hibernate", "migrate", "migrate",
"migrate", "migrate"), Var2Name = c("migrate", "migrate",
"migrate", "migrate", "solitary_or_small_clusters", "solitary_or_small_clusters",
"solitary_or_small_clusters", "solitary_or_small_clusters"
)), .Names = c("Var1", "Var2", "Freq", "Index", "ComboCode",
"Var1Name", "Var2Name"), row.names = c("2.1", "2.2", "2.3", "2.4",
"3.1", "3.2", "3.3", "3.4"), class = "data.frame")
panel_labels <- c("hibernate/migrate", "migrate/solitary_or_small_clusters")
Run Code Online (Sandbox Code Playgroud)
这是我用来生成情节的代码:
library(ggplot2)
ggplot(w, aes(x = ComboCode, y = Freq, fill = ComboCode)) +
geom_bar(stat = "Identity") +
facet_wrap(~Index, labeller = labeller(Index = panel_labels)) +
guides(fill = FALSE)
Run Code Online (Sandbox Code Playgroud)
如果有人能解释为什么标签没有被应用于情节,我将不胜感激。
labeller
需要命名参数。
只传递一个向量labeller
将返回NA
:
library(ggplot2)
panel_labels <- c("hibernate/migrate", "migrate/solitary_or_small_clusters")
ggplot(w, aes(ComboCode, Freq, fill = ComboCode)) +
geom_bar(stat = "Identity") +
facet_wrap(~Index, labeller = labeller(Index = panel_labels)) +
guides(fill = FALSE) +
labs(title = "Vector")
Run Code Online (Sandbox Code Playgroud)
传递命名向量将返回更改的标签:
panel_labels <- c("1" = "hibernate/migrate", "2" = "migrate/solitary_or_small_clusters")
ggplot(w, aes(ComboCode, Freq, fill = ComboCode)) +
geom_bar(stat = "Identity") +
facet_wrap(~Index, labeller = labeller(Index = panel_labels)) +
guides(fill = FALSE) +
labs(title = "Named vector")
Run Code Online (Sandbox Code Playgroud)