首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用JonathanA.Schwabish格式可视化堆叠条形图(2014年9月)

用JonathanA.Schwabish格式可视化堆叠条形图(2014年9月)
EN

Stack Overflow用户
提问于 2021-11-20 11:49:05
回答 1查看 113关注 0票数 1

我试图用堆叠条形图的格式绘制以下数据(df_input),在这里我们也可以逐行看到变化。知道怎么做吗?

代码语言:javascript
复制
df_input <- data.frame( Year= c(2010,2010,2010,2010,2020,2020,2020,2020), village= c("A","B","C","D","A","B","C","D"), share = c(40,30,20,10,30,30,25,15)) 

df_input_2 <- data.frame( Year= c(2010,2010,2010,2010,2015,2015,2015,2015,2020,2020,2020,2020), village= c("A","B","C","D","A","B","C","D","A","B","C","D"), share = c(40,30,20,10,30,30,25,15,20,10,30,40))    

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-20 12:05:14

实现这一目标的一个选择是通过geom_colgeom_line。对于geom_line,您必须按照映射在fill上的变量进行分组,将位置设置为“堆栈”,并调整起始/结束位置以考虑条形图的宽度。此外,还必须手动将geom_linegeom_line设置为y

代码语言:javascript
复制
library(ggplot2)


width <- .6 # Bar width

ggplot(df_input, aes(share, factor(Year), fill = village)) +
  geom_col(width = width) +
  geom_line(aes(x = share, 
                y = as.numeric(factor(Year)) + ifelse(Year == 2020, -width / 2, width / 2), 
                group = village), position = "stack", orientation = "y")

用两年多的时间编辑变得更加棘手。在这种情况下,我会切换到´geom_segment`。此外,为了准备用于´geom_segment´的数据,我们还必须进行一些数据争论:

代码语言:javascript
复制
library(ggplot2)
library(dplyr)

# Example data with three years
df_input_2 <- data.frame( Year= c(2010,2010,2010,2010,2015,2015,2015,2015,2020,2020,2020,2020), village= c("A","B","C","D","A","B","C","D","A","B","C","D"), share = c(40,30,20,10,30,30,25,15,20,10,30,40))    

width = .6

# Data wrangling
df_input_2 <- df_input_2 %>% 
  group_by(Year) %>% 
  arrange(desc(village)) %>% 
  mutate(share_cum = cumsum(share)) %>% 
  group_by(village) %>% 
  arrange(Year) %>% 
  mutate(Year = factor(Year),
         Year_lead = lead(Year), share_cum_lead = lead(share_cum))

ggplot(df_input_2, aes(share, factor(Year), fill = village)) +
  geom_col(width = width) +
  geom_segment(aes(x = share_cum, xend = share_cum_lead, y = as.numeric(Year) + width / 2, yend = as.numeric(Year_lead) - width / 2, group = village))
#> Warning: Removed 4 rows containing missing values (geom_segment).

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70045626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档