120_PowerBI堆积瀑布图_R脚本Visual
阅读原文时间:2023年07月08日阅读:1
博客:www.jiaopengzi.com

焦棚子的文章目录

请点击下载附件

二、data

注意红色框标注地方

# 下面用于创建数据帧并删除重复行的代码始终执行,并用作脚本报头:
# dataset <- data.frame(dim, wd, values)
# 在此处粘贴或键入脚本代码:
====================================================================================================
参考:https://stackoverflow.com/questions/48259930/how-to-create-a-stacked-waterfall-chart-in-r
译文:https://codeday.me/bug/20190319/786734.html
====================================================================================================

library("ggplot2")
library("dplyr")

df <- dataset

df.tmp <- df %>%
mutate(
dim = factor(dim,
levels = c("A", "B", "C", "D")),
wd = factor(wd,
levels = c("E", "W", "Q"))
) %>%

arrange(dim, desc(wd)) %>%
mutate(end.Bar = cumsum(values),
start.Bar = c(0, head(end.Bar, -1))) %>%
rbind(
df %>%
group_by(wd) %>%
summarise(values = sum(values)) %>%
mutate(
dim = "Total",
wd = factor(wd,
levels = c("E", "W", "Q"))
) %>%
arrange(dim, desc(wd)) %>%
mutate(end.Bar = cumsum(values),
start.Bar = c(0, head(end.Bar, -1))) %>%
select(names(df),end.Bar,start.Bar)
) %>%
mutate(group.id = group_indices(., dim)) %>%
group_by(dim) %>%
mutate(total.by.x = sum(values)) %>%
select(dim, wd, group.id, start.Bar, values, end.Bar, total.by.x)

ggplot(df.tmp, aes(x = group.id, fill = wd)) +
geom_rect(aes(x = group.id,
xmin = group.id - 0.25,
xmax = group.id + 0.25,
ymin = end.Bar,
ymax = start.Bar),
color="black",
alpha=0.95) +
geom_segment(aes(x=ifelse(group.id == last(group.id),
last(group.id),
group.id+0.25),
xend=ifelse(group.id == last(group.id),
last(group.id),
group.id+0.75),
y=ifelse(wd == "E",
end.Bar,
max(end.Bar)2),
yend=ifelse(wd == "E",
end.Bar,
max(end.Bar)2)),
colour="black") +
geom_text(
mapping =
aes(
label = ifelse(values < 150,
"",
ifelse(nchar(values) == 3,
as.character(values),
sub("(.{1})(.)", "\1,\2",
as.character(values)
)
)
),
y = rowSums(cbind(start.Bar,values/2))
),
color = "white",
fontface = "bold"
) +
geom_text(
mapping =
aes(
label = ifelse(wd != "E",
"",
ifelse(nchar(total.by.x) == 3,
as.character(total.by.x),
sub("(.{1})(.)", "\1,\2",
as.character(total.by.x)
)
)
),
y = end.Bar+200
),
color = "#213058",
fontface = "bold"
) +
分类颜色设置

scale_fill_manual(values=c('#ADB175','#8E599F','#213058')) +
Y轴设置

注意:

1、R视觉对象,发布需要pro才行;

2、data的形式和X、Y轴的设置;

3、对R要有所了解。

by焦棚子

焦棚子的文章目录

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章