簡體   English   中英

R中的聚集堆積條形圖

[英]Clustered Stacked Bar Chart in R

有沒有辦法在 R 中制作聚集堆積條形圖?

目前我有 2 個堆疊條形圖,如下所示:
(對不起,鏈接,我還不能張貼圖片的問題)
堆積條形圖 1
堆積條形圖 2

我的數據看起來像這樣:

|state|A1|B1|C1|D1|E1|A2|B2|C2|D2  
|AL|  | 3| 2| 4|12| 2| 2| 8| 1| 6|
|AK|  | 2| 4|22| 6| 4| 4|12| 2| 3|
|AZ|  | 2| 1| 5| 5|45| 6| 2| 4|95|
|CA|  | 3| 9|11| 3|12| 7| 1| 5|25|

使用這些數據,有沒有辦法制作一個聚集堆積條形圖,以便每個州的第二個值緊挨着第一個值?

到目前為止,我已經使用 plotly 來制作這些圖形,我的代碼如下所示:

p1 <- plot_ly(data=df, x = ~state, y = ~E1, type = 'bar', name = 'E1') %>%
  add_trace(y = ~D1, name = 'D1') %>%
  add_trace(y = ~C1, name = 'C1') %>%
  add_trace(y = ~B1, name = 'B1') %>%
  add_trace(y = ~A1, name = 'A1') %>%
  layout(yaxis = list(title = ''), barmode = 'stack')
p1

編輯:我希望最終的圖表看起來像這樣:圖表示例
但是對於美國的每個州

您有兩個組變量 ABCD 和 1,2,因此較長的數據表可能更適合與 ggplot2 一起使用。 例如,對於每個狀態,您有 4*2 = 8 個“觀察”。

這是使用tidyr::pivot_longer將數據幀轉換為更長格式並使用tidyr::pivot_longer繪制 2 組條形圖的代碼。

library(dplyr)
library(tidyr)
library(ggplot2)

df =data.table::fread(
"
|state|A1|B1|C1|D1|E1|A2|B2|C2|D2|
|AL   | 3| 2| 4|12| 2| 2| 8| 1| 6|
|AK   | 2| 4|22| 6| 4| 4|12| 2| 3|
|AZ   | 2| 1| 5| 5|45| 6| 2| 4|95|
|CA   | 3| 9|11| 3|12| 7| 1| 5|25|
"
)

df1 = df %>% 
  select(state, A1,B1,C1,D1,E1) %>% 
  pivot_longer(ends_with("1"))
df2 = df %>% 
  select(state, A2,B2,C2,D2) %>% 
  pivot_longer(ends_with("2")) 

dfall = rbind(df1,df2)%>% 
  mutate(group1= substr(name,1,1), # split "A1" to group1:"A" and group2:"1"
         group2= substr(name,2,2))

ggplot(dfall, aes(x=state,y = value, fill=group1, group=group2)) +
  geom_col(position = "dodge")

reprex 包(v0.3.0.9000) 於 2019 年 12 月 20 日創建

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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