是否有一种方法可以在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
但是对于美国的每个州
答案 0 :(得分:0)
您有两个组变量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),
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创建