[英]ggplot plotting multiple bars
我已經分成不同的街區工資數據的計數hood
,並進一步細分為與他們的誤差沿着不同的收入階層min
和max
為每個收入階層。 我想用每個鄰域的誤差幅度標出收入等級。 以下是我的數據的一個子集:
hood PHE_Less than 20k PHE_Less than 20k max PHE_Less than 20k min PHE_20k to 35k PHE_20k to 35k max PHE_20k to 35k min
a 291 368.38 213.62 250 331.15 168.85
b 220 283.86 156.14 125 185.47 64.53
c 226 296.82 155.18 306 394.33 217.67
d 25 41.82 8.18 73 107.94 38.06
這是我的R代碼:
PHE_20k.to.35k <- ggplot ( data = mydata2
,aes ( x = hood
,y = PHE_20k.to.35k
,fill= hood)) +
geom_bar (stat = "identity", group = 2) +
geom_errorbar( aes (ymin = PHE_20k.to.35k.max
,ymax = PHE_20k.to.35k.min)
,width = .2) +
ylab("20k to 35k") +
xlab("") +
guides (fill = F)
PHE_20k.to.35k
每個罩子只能給我一個收入等級。 如何添加另一個?
我想讓兩個收入PHE_Less than 20k
, PHE_20k to 35k
,每個hood
的誤差范圍,並用圖例說明哪個收入PHE_20k to 35k
是哪個。 實際上,每個社區有4個收入等級,但這將有助於我完成目標。
任何幫助將不勝感激!
您要做的第一件事是使數據成為ggplot2
的適當形狀。 ggplot
的哲學是數據采用長格式,您可以在其中將數據變量分配給不同的美觀度(例如顏色或位置),從而動態創建可視元素。 可能需要重塑數據的一個提示是,列具有非常相似的名稱-這表明它們包含非常相似的數據。
考慮一下您要繪制的內容以及如何將不同的元素組合在一起。 如果我正確理解了該問題,則沿x軸的位置取決於鄰域和括號。 誤差線的位置也取決於鄰域和括號。 誤差線的端點取決於值的最小值和最大值。
我將數據收集為長格式,並使用一些正則表達式函數從key
列中提取了括號標簽和度量類型(最小值,最大值或兩者都不包含),其中包含以前的列名。 此提取為空白的標簽本身就是測量值,因此我用replace_na
填充了這些內容,然后將其展開,以便對括號和鄰域的每種組合分別進行最小,最大和測量。
library(tidyverse)
df_tidy <- df %>%
gather(key = key, value = value, -hood) %>%
mutate(bracket = str_extract(key, "(?<=PHE_)(\\w+\\s){2}\\w+")) %>%
mutate(type = str_extract(key, "(min|max)")) %>%
select(-key) %>%
replace_na(list(type = "measure")) %>%
spread(key = type, value = value)
df_tidy
#> hood bracket max measure min
#> 1 a 20k to 35k 331.15 250 168.85
#> 2 a Less than 20k 368.38 291 213.62
#> 3 b 20k to 35k 185.47 125 64.53
#> 4 b Less than 20k 283.86 220 156.14
#> 5 c 20k to 35k 394.33 306 217.67
#> 6 c Less than 20k 296.82 226 155.18
#> 7 d 20k to 35k 107.94 73 38.06
#> 8 d Less than 20k 41.82 25 8.18
從那里開始准備繪制數據,通過躲避將條形圖和誤差條並排放置。 您會注意到的一個問題是如何填充條形圖和為錯誤欄塗色:很難看到錯誤條重疊的地方。 一種選擇是降低條形的alpha。
ggplot(df_tidy, aes(x = hood, y = measure, fill = bracket)) +
geom_col(position = position_dodge(width = 0.9), alpha = 0.5) +
geom_errorbar(aes(ymin = min, ymax = max, color = bracket), position = position_dodge(width = 0.9), width = 0.4)
另一個方法是手動設置相似的填充和顏色,但錯誤欄較暗。
ggplot(df_tidy, aes(x = hood, y = measure, fill = bracket)) +
geom_col(position = position_dodge(width = 0.9)) +
geom_errorbar(aes(ymin = min, ymax = max, color = bracket), position = position_dodge(width = 0.9), width = 0.4) +
scale_fill_manual(values = c("skyblue", "tomato")) +
scale_color_manual(values = c("skyblue4", "tomato4"))
我將那些美學決定留給您。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.