使用不同的变量自定义 ggplot2 图例
Customize ggplot2 legend with different variables
我有以下关于美国和德国青少年编码技能的数据。我可以很容易地展示他们的条形图,但我还需要展示每个国家的青少年总数。
DF <- data.frame(code = rep(c("A","B","C"), each = 2),
Freq = c(441,121,700,866,45,95),
Country = rep(c("USA","Germany"),3),
Total = rep(c(1186,1082),3))
ggplot(DF, aes(code, Freq, fill = code)) + geom_bar(stat = "identity", alpha = 0.7) +
facet_wrap(~Country, scales = "free") +
theme_bw() +
theme(legend.position="none")
例如,我可以用 Country
和 Total
代替 code
的默认图例。感谢您的帮助
以下是我的建议:
library(dplyr); library(ggplot2)
DF %>%
add_count(Country, wt = Total) %>%
mutate(Country_total = paste0(Country, ": Total=", n)) %>%
ggplot(aes(code, Freq, fill = code)) + geom_bar(stat = "identity", alpha = 0.7) +
facet_wrap(~Country_total, scales = "free") +
theme_bw() +
theme(legend.position="none")
做你要求的事情会采取不同的方法,因为你描述的数据严格来说不是 ggplot2 图例(它解释了一个变量如何映射到一个图形美学),而是显示在绘图旁边的 table 或注释。这可以单独生成并使用 patchwork
或 grid
包添加到图中。
例如:
library(patchwork); library(gridExtra)
ggplot(DF, aes(code, Freq, fill = code)) + geom_bar(stat = "identity", alpha = 0.7) +
facet_wrap(~Country, scales = "free") +
theme_bw() +
theme(legend.position="none") +
tableGrob(count(DF, Country, wt = Total)) +
plot_layout(widths = c(2,1))
我有以下关于美国和德国青少年编码技能的数据。我可以很容易地展示他们的条形图,但我还需要展示每个国家的青少年总数。
DF <- data.frame(code = rep(c("A","B","C"), each = 2),
Freq = c(441,121,700,866,45,95),
Country = rep(c("USA","Germany"),3),
Total = rep(c(1186,1082),3))
ggplot(DF, aes(code, Freq, fill = code)) + geom_bar(stat = "identity", alpha = 0.7) +
facet_wrap(~Country, scales = "free") +
theme_bw() +
theme(legend.position="none")
例如,我可以用 Country
和 Total
代替 code
的默认图例。感谢您的帮助
以下是我的建议:
library(dplyr); library(ggplot2)
DF %>%
add_count(Country, wt = Total) %>%
mutate(Country_total = paste0(Country, ": Total=", n)) %>%
ggplot(aes(code, Freq, fill = code)) + geom_bar(stat = "identity", alpha = 0.7) +
facet_wrap(~Country_total, scales = "free") +
theme_bw() +
theme(legend.position="none")
做你要求的事情会采取不同的方法,因为你描述的数据严格来说不是 ggplot2 图例(它解释了一个变量如何映射到一个图形美学),而是显示在绘图旁边的 table 或注释。这可以单独生成并使用 patchwork
或 grid
包添加到图中。
例如:
library(patchwork); library(gridExtra)
ggplot(DF, aes(code, Freq, fill = code)) + geom_bar(stat = "identity", alpha = 0.7) +
facet_wrap(~Country, scales = "free") +
theme_bw() +
theme(legend.position="none") +
tableGrob(count(DF, Country, wt = Total)) +
plot_layout(widths = c(2,1))