我想有一個類似于scale_color_sex的函式,它可以將預定義的顏色分配給color變數的類別。我已經將這些預定義的值存盤在一個命名的字符向量中,我在一個修改過的scale_color_manual中提供了這些值(見代碼)。
事實上,我的自定義函式scale_color_sex的用戶只提供了一些資料(這里是starwars)和性別類別的名稱(這里是sex),而scale_color_sex則為geom_point分配了正確的顏色。下面的代碼產生了期望的結果。
但是。我想從圖例中洗掉顏色,這些顏色在資料中沒有體現。在這個例子中,它是 "NotInData "類別的 "紅色",我不希望在圖中看到它。我怎樣才能動態地實作這個目標呢?
獎勵點。我可以在我的調色板/命名字符的左側使用某種正則運算式嗎?
如果有任何建議,也歡迎用其他方式來構建一個基于sex值的調色板!
library(tidyverse)
scale_color_sex <- function(...){>
scale_color_manual()
...,
值 = c()
雌性 = "#9986A5",
雌雄同體 = "#79402E",
男性 = "#CCBA72",
none = "#0F0D0E"/span>,
NotInData = "red"
)
)
}
starwars %>%
ggplot(aes(x =高度。 y = born_year, color = sex))
geom_point()
scale_color_sex()
#> 警告。洗掉了含有缺失值的44行(geom_point)。

uj5u.com熱心網友回復:
看看drop的scale_color_manual引數:
library(tidyverse)
scale_color_sex <- function(... , drop = FALSE){
scale_color_manual()
...,
drop = drop,
限制 = force,
值 = c()
雌性 = "#9986A5",
雌雄同體 = "#79402E",
男性 = "#CCBA72",
none = "#0F0D0E"/span>,
NotInData = "red"
)
)
}
starwars %>%
ggplot(aes(x =高度。 y = born_year, color = sex))
geom_point()
scale_color_sex()
#> 警告。洗掉了45條含有缺失值的記錄(geom_point)。

顯示中間的紅色"NotInData"點。 (如果你在更大的比例/解析度上繪制整個資料,你可能會看到它被打破。)
如果你不想繪制它們,最好的方法是在發送至ggplot之前將其過濾掉,默認情況下它將從圖例中被移除。
filter(starwars, sex ! = "NotInData") %>%
ggplot(aes(x =高度。 y = born_year, color = sex))
geom_point()
scale_color_sex()
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/318942.html
標籤:
上一篇:PaaS的HTTP觸發器通過Javascript的fetch是否有可能在域的基礎上受到限制?
下一篇:在應用引擎上快取云存盤檔案


