【问题标题】:Clustered Stacked Bar Chart in RR中的聚集堆积条形图
【发布时间】:2020-04-12 10:57:38
【问题描述】:

有没有办法在 R 中制作成簇堆积条形图?

目前我有 2 个堆积条形图,如下所示:
(抱歉链接,我还不能将图片发布到问题中)
Stacked bar chart 1
Stacked bar chart 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

编辑: 我希望最终的图表看起来像这样:Chart Example
但是对于美国的每个州

【问题讨论】:

  • 你能发布一个你想要的 Excel 输出的例子吗?
  • 我添加了一个图表示例,说明我希望我的最终产品看起来像什么
  • 那么您的数据中有日期吗?您提供的示例数据没有日期变量。您还说您想要并排的“值”,但我不确定这些在您的示例数据集中引用的是什么。

标签: r ggplot2 plotly bar-chart data-visualization


【解决方案1】:

您有两个组变量 ABCD 和 1,2,因此较长的数据表可能更适合使用 ggplot2。例如,对于每个州,您有 4*2 = 8 个“观察”。

这是使用tidyr::pivot_longer 将数据框转换为更长格式并使用ggplot2 绘制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 package (v0.3.0.9000) 于 2019 年 12 月 20 日创建

【讨论】:

  • 太棒了,谢谢! substr(name,1,1) 部分代码有什么作用?
  • 将“A1”拆分为“A”和“1”,两组
猜你喜欢
  • 1970-01-01
  • 2020-07-17
  • 1970-01-01
  • 2017-02-28
  • 2013-12-19
  • 1970-01-01
相关资源
最近更新 更多