我有以下情節:
df1 <- data.frame(col1 = rep(LETTERS[1:3], each = 4), col2 = rnorm(12), col3 = runif(12), col4 = rep(c("Fred", "Bob"), each = 6))
df1_list <- split(df1, df1$col1)
gridExtra::grid.arrange(grobs = mapply(function (x, y) {
ggplot2::ggplot(x, ggplot2::aes(x = col2, y = col3, col = col4))
ggplot2::geom_point()
ggplot2::ggtitle(y)
ggplot2::scale_color_manual('Person', values = c('Fred' = 'red', 'Bob' = 'blue'))
}, x = df1_list, y = names(df1_list), SIMPLIFY = F))

在該圖中的第一張圖中,所有點都代表Fred,但在圖例中,Bob仍然出現。是否可以只包括圖例中每個圖表中出現的人?
我想確保'Fred'is always'red'和'Bob'is always 'blue',所以使用scale_discrete_manual函式的drop = T引數是行不通的。
謝謝!
uj5u.com熱心網友回復:
這是一個可能的解決方案,其中values引數 inscale_color_manual是動態創建的。
set.seed(1234)
df1 <- data.frame(col1 = rep(LETTERS[1:3], each = 4), col2 = rnorm(12),
col3 = runif(12), col4 = rep(c("Fred", "Bob"), each = 6))
df1$col4 <- factor(df1$col4)
df1_list <- split(df1, df1$col1)
cols <- setNames(c('red', 'blue'), c('Fred','Bob'))
gridExtra::grid.arrange(grobs = mapply(function (x, y) {
x$col4 <- droplevels(x$col4)
idx <- match(levels(x$col4), names(cols))
ggplot2::ggplot(x, ggplot2::aes(x = col2, y = col3, col = col4))
ggplot2::geom_point()
ggplot2::ggtitle(y)
ggplot2::scale_color_manual('Person', values = cols[idx])
}, x = df1_list, y = names(df1_list), SIMPLIFY = F))

uj5u.com熱心網友回復:
你能分享你的,sessionInfo()以便我們可以看到你運行的軟體包版本嗎?我運行你的代碼,這就是我得到的。

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/398472.html
