簡體   English   中英

ggplot繪制多個條形圖

[英]ggplot plotting multiple bars

我已經分成不同的街區工資數據的計數hood ,並進一步細分為與他們的誤差沿着不同的收入階層minmax為每個收入階層。 我想用每個鄰域的誤差幅度標出收入等級。 以下是我的數據的一個子集:

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 20kPHE_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM