博客:www.jiaopengzi.com

焦棚子的文章目录

请点击下载附件

一、效果

二、data

三、添加字段

注意红色框标注地方

四、code

# 下面用于创建数据帧并删除重复行的代码始终执行,并用作脚本报头:
# 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轴设置

scale_y_continuous(

expand=c(0,0),

limits = c(0, 4000),

breaks = seq(0, 4000, 500),

labels = ifelse(nchar(seq(0, 4000, 500)) < 4,

as.character(seq(0, 4000, 500)),

sub("(.{1})(.*)", "\1,\2",

as.character(seq(0, 4000, 500))

)

)

) +

scale_x_continuous(

expand=c(0,0),

limits = c(min(df.tmp$group.id)-0.5,max(df.tmp$group.id)+0.5),

breaks = c(min(df.tmp$group.id)-0.5,

unique(df.tmp$group.id),

unique(df.tmp$group.id) + 0.5

),

labels =

c("",

as.character(unique(df.tmp$dim)),

rep(c(""), length(unique(df.tmp$dim)))

)

) +

theme(

text = element_text(size = 14, color = "#213058"),

axis.text = element_text(size = 10, color = "#213058", face = "bold"),

axis.text.y = element_text(margin = margin(r = 0.3, unit = "cm")),

axis.ticks.x =

element_line(color =

c("black",

rep(NA, length(unique(df.tmp$dim))),

rep("black", length(unique(df.tmp$dim))-1)

)

),

axis.line = element_line(colour = "#213058", size = 0.5),

axis.ticks.length = unit(.15, "cm"),

axis.title.x = element_blank(),

axis.title.y = element_blank(),

panel.background = element_blank(),

plot.margin = unit(c(1, 1, 1, 1), "lines"),

legend.text = element_text(size = 10,

color = "#213058",

face = "bold",

margin = margin(l = 0.25, unit = "cm")

),

legend.title = element_blank()

)

注意:

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

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

3、对R要有所了解。

by焦棚子

焦棚子的文章目录

120_PowerBI堆积瀑布图_R脚本Visual的更多相关文章

  1. 教你用Python创建瀑布图

    介绍 对于绘制某些类型的数据来说,瀑布图是一种十分有用的工具.不足为奇的是,我们可以使用Pandas和matplotlib创建一个可重复的瀑布图. 在往下进行之前,我想先告诉大家我指代的是哪种类型的图 ...

  2. 第四篇:R语言数据可视化之折线图、堆积图、堆积面积图

    折线图简介 折线图通常用来对两个连续变量的依存关系进行可视化,其中横轴很多时候是时间轴. 但横轴也不一定是连续型变量,可以是有序的离散型变量. 绘制基本折线图 本例选用如下测试数据集: 绘制方法是首先 ...

  3. 看懂 Fiddler 的瀑布图

    最近准备给组内的新同学们分享下 Fiddler 这枚神器,可以讲的地方太多,我打算把一节课讲不完的内容写在博客上,大家可以随便看看.今天先介绍下 Fiddler 的瀑布图. 每个网络请求都会经历域名解 ...

  4. Excel催化剂图表系列之品味IBCS瀑布图观察企业利润构成

    IBCS图表,每个细节都值得反复琢磨参悟,此篇给大家送上详尽的瀑布图方式下的利润数据观察.请不要拿Excel2016版提供的瀑布图与IBCS版的瀑布图作对比,那完全不是一个级别的,可以类比为拿一辆经济 ...

  5. maftools | 从头开始绘制发表级oncoplot(瀑布图)

    本文首发于微信公众号 **“ 生信补给站 ”** ,期待您的关注!!! 原文链接:https://mp.weixin.qq.com/s/G-0PtaoO6bYuhx_D_Rlrlw 对于组学数据的分析 ...

  6. Tableau绘制漏斗图、甘特图、瀑布图、镶边面积图、阴影坡度图

    Tableau绘制漏斗图.甘特图.瀑布图.镶边面积图.阴影坡度图 本文首发于博客冰山一树Sankey,去博客浏览效果更好.直接右上角搜索该标题即可 一. 漏斗图 数据源 1.1 分色直条漏斗图 (1) ...

  7. Unity 烘焙材质到单一贴图的脚本

    原地址:http://www.cocoachina.com/gamedev/gameengine/2011/0406/2756.html 这个脚本由 CocoaChina 版主 “四角钱” 分享,可以 ...

  8. Mac生成APP图标和启动图的脚本

    概述 之前用的一个批量导出APP图标和启动图的软件,今天发现收费了,于是自己造了个简单的轮子. 实现 Mac上的sips命令,可以很方便的帮助用户修改图片尺寸 Xcode里面的APP启动图资源包含两部 ...

  9. WPF数据可视化-瀑布图

    实现方式一: 将数据(Point[])根据索引沿X轴使用虚拟画布进行绘制,每个数据绘制大小为1px * 1px:最终绘制出的宽度等于数据的总长度.标记并存储当前绘制的图为PreviousBitmap; ...

随机推荐

  1. 摩拜单车微信小程序开发技术总结

    前言 摩拜单车小程序已于微信小程序上线第一天正式发布,刷爆微博媒体朋友圈.本文主要讲讲技术方向的总结,在段时间的开发周期内内如何一步步从学习到进阶. 思维转变 微信小程序没有HTML的常用标签,而是类 ...

  2. 【Android开发】安卓炫酷效果集合

    1. android-ripple-background 能产生波浪效果的背景图片控件,可以自定义颜色,波浪扩展的速度,波浪的圈数. github地址 2. android-shapeLoadingV ...

  3. 【Android开发】Android 颜色透明度换算

    透明度 透明度分为256阶(0-255),计算机上用16进制表示为(00-ff). 透明就是0阶,不透明就是255阶,如果50%透明就是127阶(256的一半当然是128,但因为是从0开始,所以实际上 ...

  4. Java中重载的应用

    学习目标: 掌握Java方法的重载 学习内容: 1.重载定义 参数列表: 参数的类型 + 参数的个数 + 参数的顺序 方法签名: 方法名称 + 方法参数列表,在同一个类中,方法签名是唯一的,否则编译报 ...

  5. MySQL安装配置教程(超级详细)

    一. 下载MySQL Mysql官网下载地址:https://downloads.mysql.com/archives/installer/ 1. 选择要安装的版本,本篇文章选择的是5.7.31版本, ...

  6. CPU乱序执行问题

    CPU为了提高执行效率,会在一条指令执行的过程中(比如去内存读数据,读数据的过程相较于CPU的执行速度慢100倍以上,cpu处于等待状态),这个时候cpu会分析接下来的指令是否正在执行的指令相关联,如 ...

  7. 告别收费BI!如何自己动手做一个免费的可视化数据报表还支持文档在线预览?

    本人大学刚毕业目前在一家互联网公司从事产品运营工作,一季度刚过,公司需要我出一份产品运营数据报表,由于产品用户数据.订单数据等数据量太大,我希望找一款Bi产品,支持我做出一个精美的可视化报表,还可以让 ...

  8. Codeforces Round #721 (Div. 2)A. And Then There Were K(位运算,二进制) B1. Palindrome Game (easy version)(博弈论)

    半个月没看cf 手生了很多(手动大哭) Problem - A - Codeforces 题意 给定数字n, 求出最大数字k, 使得  n & (n−1) & (n−2) & ...

  9. js实时监听dom尺寸变化

    开发过程中总会遇到dom节点尺寸变化,去做一些相应的逻辑,第一想到的应该是用$(window).resize()去做,但是这个是监听浏览器窗口的所以这个时候要用 ResizeObserver Resi ...

  10. 初踩坑JS加载与audio接口:点击头像开始/暂停背景音乐

    背景 封楼期间难得空闲,也静不下心学习,空闲之余萌生了重做引导单页的想法.因为之前都是扒站(某大公司游戏官网)+小改,一来虽然很炫酷,但本人水平有限,仍有很大一部分JS无从下手,甚至是看不懂|-_-| ...