嗨所以我有一些看起來像這樣的資料:
`Marketing Variables` LICENCE_STATUS count pct val
<chr> <chr> <lgl> <int> <chr>
1 RESIDENT_MARKETING_ALLOWED ACTIVE FALSE 7612 46.61%
2 RESIDENT_MARKETING_ALLOWED ACTIVE TRUE 8720 53.39%
3 RESIDENT_MARKETING_ALLOWED CANCELLED FALSE 418 52.05%
4 RESIDENT_MARKETING_ALLOWED CANCELLED TRUE 385 47.95%
5 RESIDENT_MARKETING_ALLOWED EXPIRED FALSE 78352 81.85%
6 RESIDENT_MARKETING_ALLOWED EXPIRED TRUE 17373 18.15%
7 THIRD_PARTY_MARKETING_ALLOWED ACTIVE FALSE 10629 65.1%
8 THIRD_PARTY_MARKETING_ALLOWED ACTIVE TRUE 5698 34.9%
9 THIRD_PARTY_MARKETING_ALLOWED CANCELLED FALSE 571 70.93%
10 THIRD_PARTY_MARKETING_ALLOWED CANCELLED TRUE 234 29.07%
11 THIRD_PARTY_MARKETING_ALLOWED EXPIRED FALSE 85166 88.92%
12 THIRD_PARTY_MARKETING_ALLOWED EXPIRED TRUE 10612 11.08%
目標是我想用下面的代碼制作一個多面柱形圖:
ggplot(test)
geom_col(aes(x = `Marketing Variables`, y = pct, fill = count), position = "fill")
coord_flip()
theme_minimal()
facet_wrap(~LICENCE_STATUS)
然而,問題是我想為每個條添加一個geom_label()變數。val我希望顯示的 val 是該變數的 TRUE 計數。
舉個例子:
第一列是:
- LICENCE_STATUS:活動
- 標記變數:THIRD_PARTY_MARKETING_ALLOWED
count = TRUE在這里,我們看到val34.9%。所以我希望 34.9% 在條形圖的深度為 34.9%,或者基本上是藍色與紅色的交匯處。

注意,我不希望 FALSE 的 val 出現在任何地方;是的,只有 true 和 false 是count真實資料中的選項。
這是資料:
structure(list(`Marketing Variables` = c("RESIDENT_MARKETING_ALLOWED",
"RESIDENT_MARKETING_ALLOWED", "RESIDENT_MARKETING_ALLOWED", "RESIDENT_MARKETING_ALLOWED",
"RESIDENT_MARKETING_ALLOWED", "RESIDENT_MARKETING_ALLOWED", "THIRD_PARTY_MARKETING_ALLOWED",
"THIRD_PARTY_MARKETING_ALLOWED", "THIRD_PARTY_MARKETING_ALLOWED",
"THIRD_PARTY_MARKETING_ALLOWED", "THIRD_PARTY_MARKETING_ALLOWED",
"THIRD_PARTY_MARKETING_ALLOWED"), LICENCE_STATUS = c("ACTIVE",
"ACTIVE", "CANCELLED", "CANCELLED", "EXPIRED", "EXPIRED", "ACTIVE",
"ACTIVE", "CANCELLED", "CANCELLED", "EXPIRED", "EXPIRED"), count = c(FALSE,
TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE,
TRUE), pct = c(7612L, 8720L, 418L, 385L, 78352L, 17373L, 10629L,
5698L, 571L, 234L, 85166L, 10612L), val = c("46.61%", "53.39%",
"52.05%", "47.95%", "81.85%", "18.15%", "65.1%", "34.9%", "70.93%",
"29.07%", "88.92%", "11.08%")), row.names = c(NA, -12L), groups = structure(list(
`Marketing Variables` = c("RESIDENT_MARKETING_ALLOWED", "RESIDENT_MARKETING_ALLOWED",
"RESIDENT_MARKETING_ALLOWED", "THIRD_PARTY_MARKETING_ALLOWED",
"THIRD_PARTY_MARKETING_ALLOWED", "THIRD_PARTY_MARKETING_ALLOWED"
), LICENCE_STATUS = c("ACTIVE", "CANCELLED", "EXPIRED", "ACTIVE",
"CANCELLED", "EXPIRED"), .rows = structure(list(1:2, 3:4,
5:6, 7:8, 9:10, 11:12), ptype = integer(0), class = c("vctrs_list_of",
"vctrs_vctr", "list"))), row.names = c(NA, -6L), class = c("tbl_df",
"tbl", "data.frame"), .drop = TRUE), class = c("grouped_df",
"tbl_df", "tbl", "data.frame"))
我正在專門尋找 `geom_label()' 的解決方案
EDIT The reason I am unable to use the linked solution is I get the following error:
Error in layer(data = data, mapping = mapping, stat = stat, geom = GeomText, :
object 'val' not found
This occurs when I add the following:
geom_text(label = val, y = pct, size = 2.5, position = position_stack(vjust = 0.5))
uj5u.com熱心網友回復:
你可以像這樣達到你想要的結果:
- 至于設定酒吧
position="fill"中geom_label了。 - 僅添加
valifcount=TRUE使用 anifelse分配NAtoFALSE。 - 使有關洗掉丟失使用的警告靜音
na.rm=TRUE。
library(ggplot2)
ggplot(test, aes(x = pct, y = `Marketing Variables`, fill = count))
geom_col(position = "fill")
geom_label(aes(label = ifelse(count, val, NA_character_)), position = "fill", na.rm = TRUE, show.legend = FALSE)
theme_minimal()
facet_wrap(~LICENCE_STATUS)

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/420827.html
標籤:
