0
我有基於此answer,一個後續問題,其中在下面的代碼行的scale_fill_manual
位:ggplot_build的組列如何對應原始因子水平?
ggplot(data = temp2, aes(x = x, y = y2, fill = group)) +
geom_bar(width = 0.1, stat = "identity") +
scale_fill_manual(name = "key", labels = c("a", "b", "c", "d", "e", "others"),
values = c("#F8766D", "#A3A500", "#00BF7D", "#00B0F6", "#E76BF3", "#000000")) +
labs(x = "value", y = "count") -> g2
的顏色值和圖例標籤使用一些映射到在所述group
柱測定數據幀由ggplot_build
生成。我的問題是關於這種映射的確定,尤其是當group
列是從具有不完整因子水平的因子列派生的時候。
例如:
set.seed(111)
tmp_df <-
data.frame(a = rnorm(100, 0, 1),
b = rnorm(100, 0.5, 1),
c = rnorm(100, -0.5, 1),
d = rnorm(100, 1, 1),
e = rnorm(100, -1, 1)) %>%
tidyr::gather() %>%
mutate(key = factor(key, levels = letters[1:5]))
現在創建堆積條形圖,併產生底層的原始數據:
tmp_df %>%
filter(key != "c") %>%
ggplot(aes(x = value, fill = key)) +
geom_histogram(binwidth = 0.1, position = 'stack') ->
p
tmp_raw_df <- ggplot_build(p)$data[[1]]
檢查tmp_raw_df
:
> head(tmp_raw_df)
fill y count x xmin xmax density ncount ndensity PANEL group ymin ymax colour size linetype alpha
1 #C77CFF 1 1 -4.2 -4.25 -4.15 0.1 0.125 1.25 1 4 0 1 NA 0.5 1 NA
2 #00BFC4 1 0 -4.2 -4.25 -4.15 0.0 0.000 0.00 1 3 1 1 NA 0.5 1 NA
3 #7CAE00 1 0 -4.2 -4.25 -4.15 0.0 0.000 0.00 1 2 1 1 NA 0.5 1 NA
4 #F8766D 1 0 -4.2 -4.25 -4.15 0.0 0.000 0.00 1 1 1 1 NA 0.5 1 NA
5 #C77CFF 0 0 -4.1 -4.15 -4.05 0.0 0.000 0.00 1 4 0 0 NA 0.5 1 NA
6 #00BFC4 0 0 -4.1 -4.15 -4.05 0.0 0.000 0.00 1 3 0 0 NA 0.5 1 NA
我們看到的key
的值具有被映射到組號1-4。我的問題是,該映射如何完成,以及如何從tmp_raw_df
的group
列恢復關鍵或因子級別的原始值?
我不能說映射是如何完成的(雖然我通過重構'key',未使用的下降水平,並轉換爲整數懷疑),但我確信'ggplot_build(p)$ data'不再包含'key'的原始值。這些值現在應該生活在情節的一個尺度上。 –
謝謝,那麼如何/應該在哪裏去檢索這些值? – Alex
很可能,應該出現在劇情的'ggproto'對象之一中,但考慮到如何評估這些對象,我不確定您將能夠(輕鬆地)找回您正在尋找的內容。 –