作者简介Introduction

杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化。

个人公众号:数据小魔方(微信ID:datamofang) ,“数据小魔方”创始人。

精彩集锦·

那些年倒腾的R语言学习笔记,全都在这里了~

点击图片,领取限时优惠

今天跟大家介绍一款任坤大神写的新包——formattable。

这个包的功能很简单,但是却很具创意性,它颠覆了R语言data.frame数据表的呈现方式,允许在表格内自定义视觉化元素,比如对某一列数据进行字号、颜色、背景、以及图形化处理,整体的版式仍然保留表格的样式,但是已经具有了表和图结合的意味。

关于数据框的呈现方式,R语言内目前较好的自定义呈现方式是谢益辉大神的DT包,可以 将静态表格动态化,进行切片、索引、排序操作。

devtools::install_github("renkun-ken/formattable")install.packages("formattable")library("formattable")library("DT")

自定义百分比显示格式。

接触过R语言的都知道R中没有数值形式的百分比,只有浮点型,如果要在数据框中自定义某一列为百分比,则需要使用文本拼接函数将其格式化,但是这样格式化之后,该列便会失去数值格式,转换为字符型变量,无法参数数学运算。

但是formattable包通过扩展内部运算逻辑,不仅可以非常方便的将某一浮点型列自定义为百分比,而且保留其数学运算属性。

p <- percent(c(0.1, 0.02, 0.03, 0.12))p[1] 10.00% 2.00%  3.00%  12.00%p + 0.01[1] 11.00% 3.00%  4.00%  13.00%max(p)[1] 12.00%mean(p)[1] 6.75%class(p)[1] "formattable" "numeric"

通过查看其S3类发现,formattable格式继承了numeric属性,因而保留了数学运算能力。

balance <- accounting(c(1000, 500, 200, -150, 0, 1200))balance[1] 1,000.00 500.00   200.00   (150.00) 0.00     1,200.00balance + 1000

[1] 2,000.00 1,500.00 1,200.00 850.00   1,000.00 2,200.00

以上accounting函数可以将输出向量自定义为会计上使用的数字合适,三维间隔,同时负值加括号。

class(balance)[1] "formattable" "numeric"

其核心实现方式仍然是通过将其底层S3类继承numeric来实现保留数学运算功能。

p <- data.frame(  id = c(1, 2, 3, 4, 5),   name = c("A1", "A2", "B1", "B2", "C1"),  balance = accounting(c(52500, 36150, 25000, 18300, 7600), format = "d"),  growth = percent(c(0.3, 0.3, 0.1, 0.15, 0.15), format = "d"),  ready = formattable(c(TRUE, TRUE, FALSE, FALSE, TRUE), "yes", "no"))p  id name balance growth ready1  1   A1  52,500    30%   yes2  2   A2  36,150    30%   yes3  3   B1  25,000    10%    no4  4   B2  18,300    15%    no5  5   C1   7,600    15%   yes

在数据框中这些特性也依然能够保留(这是自然地,因为数据框就是由若干个等长的向量组成的)

但是这仅仅是formattable很基础的功能部分,下面给大家展示它的杀手锏——针对数据框表格的超强自定义可视化能力。

df <- data.frame(  id = 1:10,  name = c("Bob", "Ashley", "James", "David", "Jenny",     "Hans", "Leo", "John", "Emily", "Lee"),   age = c(28, 27, 30, 28, 29, 29, 27, 27, 31, 30),  grade = c("C", "A", "A", "C", "B", "B", "B", "A", "C", "C"),  test1_score = c(8.9, 9.5, 9.6, 8.9, 9.1, 9.3, 9.3, 9.9, 8.5, 8.6),  test2_score = c(9.1, 9.1, 9.2, 9.1, 8.9, 8.5, 9.2, 9.3, 9.1, 8.8),  final_score = c(9, 9.3, 9.4, 9, 9, 8.9, 9.25, 9.6, 8.8, 8.7),  registered = c(TRUE, FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE),  stringsAsFactors = FALSE)

以上是使用普通的输出打印出的数据框呈现方式,那么通过formattable函数格式化之后的数据表格又长什么样呢,人让我们拭目以待。

formattable(df,         list(               age = color_tile("white", "orange"),               grade = formatter(                                  "span",                                   style = x ~ ifelse(x == "A", style(color = "green", font.weight = "bold"), NA)                                  ),              area(col = c(test1_score, test2_score)) ~ normalize_bar("pink", 0.2),              final_score = formatter(                                  "span",                                  style = x ~ style(color = ifelse(rank(-x) <= 3, "green", "gray")),                                  x ~ sprintf("%.2f (rank: %02d)", x, rank(-x))                                  ),             registered = formatter(                                  "span",                                   style = x ~ style(color = ifelse(x, "green", "red")),                                   x ~ icontext(ifelse(x, "ok", "remove"), ifelse(x, "Yes", "No"))                                   )             )         )

是不是很神奇呀,仔细观察以上表格中,一共使用了三种自定义可视化类型,分别是字体大小和颜色自定义、字体背景自定义、以及文本自定义。

color_tile函数用于输出按照数值量级进行颜色背景填充的列。

formatter函数提供字体显示格式的自定义,grade列自定义了值为A的记录显示绿色,并将字体加粗,否则忽略。
test1_score, test2_score两列通过area函数在对应字体背景位置使用条形图来代表指标量级大小,颜色填充粉色。
final_score列对指标按照top3显示绿色,其余显示灰色,同时将内容显示格式自定义为浮点型+(rank:名次)进行显示。
registered列则在对填充颜色按照对应布尔值进行显示(TRUE显示绿色、FALSE显示红色)之外,在左侧添加了对用的icon文本(TRUE显示绿色对号,FALSE显示红色叉号)。

是不是很神奇呀,一个小小的包竟然可以做这么有趣的事情,这种表格在财务数据、营销数据或者绩效数据表中是经常会用到的可视化形式,简单明了,非常醒目。

DT::datatable(df)

而DT的datatable函数,则仅仅是通过动态交互的形式提供了一个可交互的表格UI环境。

本项目主页地址:

https://github.com/renkun-ken/formattable

相关课程推荐

体系全面,最具调性!R语言可视化&商务图表实战课程:

点击“阅读原文”开启新姿势

一款脑洞大开的表格可视化神器相关推荐

  1. redash中文版新特性,表格可视化神器让你相见恨晚

    很多时候图形本身的表达就能够展现数据的意义,但是有些需求呈现数据源或者表格.文字等来更好地解读时,仅有图形就有些不够用了,所以数据可视化中经常使用图表混排.组合交互.甚至图表合一,不但有利于数据内容的 ...

  2. 据说这是史上最牛逼的可视化神器

    全世界只有3.14 % 的人关注了 数据与算法之美 我们粉丝里面有很多小伙伴喜欢玩数据分析,粗略估计有几千人.数据分析离不开数据可视化.比如我们前面介绍过pandas画图,matplotlib画图,p ...

  3. Python史上最牛逼的可视化神器

    数据分析离不开数据可视化.比如我们前面介绍过pandas画图,matplotlib画图,pyecharts画图当然还有Tableau,今天推荐一款更牛的可视化神器,主要是这款神器的画出来的图很漂亮,色 ...

  4. 可视化神器Plotly美化表格

    公众号:尤而小屋 作者:Peter 编辑:Peter 可视化神器Plotly美化表格 有时候看到一份表格,没有任何的颜色修饰,总觉得缺点美观效果.在Excel中我们可以直接对字体的颜色.大小等进行设置 ...

  5. 一款基于 Java 的可视化 HTTP API 接口开发神器

    今天推荐的 5 个项目是: magic-api :一款基于 Java 的可视化 HTTP API 接口开发神器. LanguageTool : 一款基于 Java 语言编写的开源语言校正工具. toB ...

  6. 2款实用的Excel可视化插件,建议收藏!

    来源丨一张大千 大家好,我是小F- 这次给大家介绍2款实用的Excel可视化插件,分别是: 地图可视化-PowerMap.图表可视化-Data Chart 1.三维地图可视化插件:PowerMap 这 ...

  7. 空间数据可视化神器,Pydeck!

    来源:法纳斯特 今天给大家介绍一款超赞的空间(地理)数据可视化神器:Pydeck. Pydeck库通过deck.gl对数据进行空间可视化渲染,对3D的可视化支持非常强. 使用文档: https://p ...

  8. 07.微软又一逆天可视化神器——Power BI

    首发于我懂个P 写文章登录 07.微软又一逆天可视化神器--Power BI Simon阿文 1 年前 欢迎大家收看<我懂个P>,这是一套朴实的PPT教程. 更多新鲜教程请关注公众号:我懂 ...

  9. 高级可视化神器Plotly快速入门

    微信公众号:尤而小屋 作者:Peter 编辑:Peter 一文爱上高级可视化神器Plotly 数据可视化已经逐渐发展和深入到我们生活的各个方面,往往遇到数据分析类的工作,借助可视化的方式来呈现我们的数 ...

  10. 3000 字推荐一个可视化神器,50 行 Python 代码制作数据大屏

    作者 | 俊欣 来源 | 关于数据分析与可视化 今天小编给大家分享一个制作数据大屏的工具,非常的好用,100行左右的Python代码就可以制作出来一个完整的数据大屏,并且代码的逻辑非常容易理解. Py ...

最新文章

  1. Python 连接 redis 模块
  2. 删除Openstack所有组件
  3. node.js知识点总结
  4. 休眠事实:始终检查Criteria API SQL查询
  5. OSGI和Spring动态模块–简单的Hello World
  6. 《机器学习实战》笔记(04):基于概率论的分类方法 - 朴素贝叶斯分类
  7. 百合数c语言360问答,《百合花》
  8. C#LeetCode刷题之#665-非递减数列( Non-decreasing Array)
  9. node连接--MySQL
  10. autocad二次开发资料总结
  11. 单片机课程设计题目及要求——电风扇模拟控制系统(仿真图加代码加原理图都有)
  12. OJ刷题二——设计输出实数格式
  13. uniapp打包的app上架应用商店隐私政策:您的应用在用户同意隐私政策前申请获取用户个人信息
  14. LVS 的 Tunneling 模式
  15. 我的淘宝新店的辛酸与感恩
  16. PHP 开启 sockets
  17. tinyint对应java什么类型
  18. Verilog学习笔记(5):Verilog高级程序设计
  19. Android动态加载APK插件类
  20. scrapy代理IP

热门文章

  1. 鸿蒙 HarmonyOS 3.0,终于来了!
  2. 别乱提交代码了,你必须知道的 Git 分支开发规范!
  3. HTTPS 的五大误区,千万别理解错了!
  4. 我们精心整理的2019最新全栈资料!首次公布
  5. Hadoop 架构已凋谢 ?!
  6. Android技术总监应该干的哪些事
  7. 像招程序员那样招司机,结果……
  8. SQL数据同步到ELK(四)- 利用SQL SERVER Track Data相关功能同步数据(上)
  9. Centos7.x 装机优化
  10. 一些可视化Javascript插件