迷你图添加趋势线_如何向R表添加迷你图
迷你图添加趋势线
通常,表中需要的只是文本和数字形式的数据。 但是有时候,您也想在每一行中可视化结果。 当每一行数据都是随着时间变化的趋势时,尤其如此。
您可以在带有迷你内联图(称为迷你图)的新表列中执行此操作。 您可能在Excel中很熟悉它们,但是您也可以在交互式HTML表中创建它们-带有sparkline程序包和四个基本步骤:
[ 在我们的视频教程系列中获得Sharon Machlis的R技巧 。 | 阅读InfoWorld教程: 学习使用R处理大数据 。 • 如何重塑R中的数据 。 • 触手可及的R数据操作技巧 • R的 初学者指南 。 | 通过InfoWorld大数据报告新闻通讯了解最新的分析和大数据。 ]
- 在数据框中添加具有迷你图数据和格式的列。
- 在表选项中添加一个JavaScript代码段。 一直都是相同的代码,因此您可以保存一次并重复使用它。
- 这很简单:将
escape = FALSE
添加为datatable()
参数,以便HTML 显示为HTML而不是实际代码 。 - 这也很容易:将结果通过管道传递给添加必要依赖项的函数,以便表显示迷你图。
1.添加包含迷你图数据和格式的列
在向表添加迷你图之前,需要一个表。 这是从称为prices
的数据帧生成表的代码,包括添加搜索过滤器以及将其中一列格式化为百分比:
library(DT)datatable(prices, filter = ‘top’, options = list(paging = FALSE)) %>% formatPercentage(‘Change’, digits = 1)
如果您想继续,本文底部将介绍创建价格数据框的代码。 (您还可以在“ 使用R进行更多操作:快速交互式HTML表格 ”中找到有关使用DT包的更多信息。)
添加迷你图列的格式为
sparkline_column = spk_chr( vector_of_values, type ="type_of_chart", chartRangeMin=0, chartRangeMax=max(.$vector_of_values))
spk_chr()
函数具有两个必需的参数:要可视化的数值向量,以及所需的图形类型。 可视化选项包括折线图的折线,条形图的条形图,箱形图的框等。 不幸的是,sparkline软件包帮助文件中并未对此进行实际记录。 但是,您可以在jQuery迷你图库文档中看到可用的类型(迷你图包是该库HTML小部件R包装器)。
我也喜欢在迷你图中使用两个可选参数:设置Y轴的最小值和最大值。
那么,如何获得在迷你图中使用的每一行的值向量? 您可以编写一个for
循环,但是如果数据“整洁”,实际上这样做会更容易。 也就是说,每行仅包含一个观测值,而不是现在的方式:每行包含多个观测值。
在下面的代码中,我使用tidyr包及其collect gather()
函数创建了价格数据的简洁版本。
library(tidyr)tidyprices <- prices %>% select(-Change) %>% gather(key ="Quarter", value ="Price", Q1_1996:Q1_2018)
此代码首先加载整洁的程序包,并使用select(-Change)
删除“更改”列,因为我不希望更改百分比出现在我绘制的趋势图中。 在gather()
,我将新类别列命名为Quarter,将新值列为Price,并“收集” 1996年第一季度至2018年第一季度之间的每一列。
如果运行head(tidyprice)
,则会看到每行现在有一个观测值:MetroArea,Quarter和Price。
head(tidyprices)MetroArea Quarter Price
1 Boston Q1_1996 106.44
2 Detroit Q1_1996 107.99
3 Phil Q1_1996 105.25
4 SanFran Q1_1996 100.72
5 SiValley Q1_1996 102.93
6 Boston Q1_1998 116.78
最后,我准备创建带有迷你图信息的数据框。
prices_sparkline_data <- tidyprices %>% group_by(MetroArea) %>% summarize( TrendSparkline = spk_chr( Price, type ="line", chartRangeMin = 100, chartRangeMax = max(Price) ) )
按MetroArea分组后,以上代码使用spk_chr()
函数创建一个TrendSparkline列。 第一个参数是每个组的值向量,它是从整洁数据的“价格”列中自动创建的,因为我是按MetroArea分组的,现在进行汇总。 我将图形类型设置为折线图。 在这种情况下,我希望Y轴的最小值为100,因为那是1995年所有城市的价格指数开始的位置。最后,我将Y轴的最大值设置为与Price数据的最大值无关。
这是我的新数据框的外观:
MetroArea TrendSparkline <chr> <chr>
1 Boston "<span id=\"htmlwidget-d05dd23ac6f670067750\" class=\"sparkline html-widget\"></span>\n<script type=\"application/js...
2 Detroit "<span id=\"htmlwidget-eba14942c5694b951f08\" class=\"sparkline html-widget\"></span>\n<script type=\"application/js...
3 Phil "<span id=\"htmlwidget-8378cbbbf1c03d27b220\" class=\"sparkline html-widget\"></span>\n<script type=\"application/js...
4 SanFran "<span id=\"htmlwidget-1842afdcc8bd5af0066e\" class=\"sparkline html-widget\"></span>\n<script type=\"application/js...
5 SiValley "<span id=\"htmlwidget-09c227f72d3fbe9cd0d6\" class=\"sparkline html-widget\"></span>\n<script type=\"application/js...
您可以看到TrendSparkline列包含很多HTML。
接下来,我可以使用dplyr left_join
将这些数据添加到原始价格数据框中:
prices <- left_join(prices, prices_sparkline_data)
困难的部分已经完成。
2.添加一个JavaScript代码段
datatable(prices, filter = 'top', options = list(paging = FALSE, fnDrawCallback = htmlwidgets::JS( 'function(){ HTMLWidgets.staticRender();}') )) %>% formatPercentage('Change', digits = 1)
从fnDrawCallback
到第二个单引号和单fnDrawCallback
括号的代码是您需要添加到datatable代码的options列表参数中的代码:
fnDrawCallback = htmlwidgets::JS( 'function(){ HTMLWidgets.staticRender();}')
如果现在看一下表格的迷你图列,您会发现HTML 代码本身就是代码 ,而不是正在执行的代码 。
您可以使用第3步解决此问题。
3.添加escape = FALSE
在datatable()
代码中添加escape = FALSE
可使代码执行而不是显示 。 (默认值为escape = TRUE
,这意味着将对HTML代码进行转义而不是执行。)
datatable(prices, escape = FALSE, filter = 'top', options = list(paging = FALSE, fnDrawCallback = htmlwidgets::JS( 'function(){ HTMLWidgets.staticRender();}'))) %>% formatPercentage('Change', digits = 1)
但是,如果使用转义的代码运行表并在RStudio中查看,则迷你图列中可能看不到任何内容。 那是因为您需要最后一步。
4.添加必要的依赖关系
最后一步是将表的结果传递到一个函数中,该函数添加了所有要显示的spk_add_deps()
必需的依赖关系: spk_add_deps()
。
这是最终的代码:
datatable(prices, escape = FALSE, filter = 'top', options = list(paging = FALSE, fnDrawCallback = htmlwidgets::JS( 'function(){ HTMLWidgets.staticRender();}'))) %>% spk_add_deps() %>% formatPercentage('Change', digits = 1)
您应该看到迷你图。
您也可以将鼠标悬停在图形上以查看实际数据点。
[有关更多R技巧,请访问https://go.infoworld.com/morewithR 。 ]
创建价格数据框的代码
prices <- data.frame(stringsAsFactors=FALSE, MetroArea = c("Boston", "Detroit", "Phil", "SanFran", "SiValley"), Q1_1996 = c(106.44, 107.99, 105.25, 100.72, 102.93), Q1_1998 = c(116.78, 127.83, 107.15, 117.25, 126.01), Q1_2000 = c(148.58, 150.8, 111.73, 159.11, 170.74), Q1_2002 = c(189.41, 170.34, 132.86, 195.5, 205.14), Q1_2004 = c(234.68, 181.89, 164.54, 223.02, 223.33), Q1_2006 = c(272.14, 186.43, 219.74, 305.88, 311.17), Q1_2008 = c(253.33, 158.29, 234.13, 291.35, 293.01), Q1_2010 = c(227.91, 117.45, 219.46, 248.28, 238.12), Q1_2012 = c(224.55, 111.14, 211.24, 238.37, 233), Q1_2014 = c(237.61, 130.59, 214.87, 306.24, 300.89), Q1_2016 = c(264.23, 148.26, 227.5, 387.34, 367.1), Q1_2018 = c(300.96, 170.92, 258.49, 447.45, 428.45), Change = c(2.01, 0.709, 1.585, 3.474, 3.284))
翻译自: https://www.infoworld.com/article/3318222/how-to-add-sparklines-to-r-tables.html
迷你图添加趋势线
迷你图添加趋势线_如何向R表添加迷你图相关推荐
- sip 时序图_时序图怎么看_教你如何看懂时序图 - 什么是时序图_时序图怎么看_教你如何看懂时序图...
时序图怎么看_教你如何看懂时序图 操作时序永远使用是任何一片IC芯片的最主要的内容.一个芯片的所有使用细节都会在它的官方器件手册上包含.所以使用一个器件事情,要充分做好的第一件事就是要把它的器件手册上 ...
- r 语言 ggplot上添加平均值_技术贴 | R语言:ggplot堆叠图、冲积图、分组分面、面积图...
点击蓝字↑↑↑"微生态",轻松关注不迷路 利用R语言堆叠图,我们可以将一个项目中所有样品的物种组成展示出来.下面介绍如何利用R语言进行物种组成分析和可视化.过程分为以下几步: 1) ...
- 密度图的密度估计_不同类型的二维密度图小教程
R相关小教程链接: 用R构建气泡图案例小教程 [小教程]散点图.饼图怎么在我的文章中完美展示小教程 热图在论文发表中完美呈现小教程 R与密度.函数.变量的微妙关系 北京市计算中心医用数据库建设解决方案 ...
- 苹果手机怎么在照片上添加文字_要给照片快速添加文字、图框、印章,用这款手机软件比较方便...
现在手机的拍照功能越来越先进,人们走到哪儿,都会随拍几张照片,那么,如何后期才能让照片更加的赏心悦目呢?主要从添加文字.漂亮的文字排版.添加相框.以及添加印章元素等几个方面去处理.比如像下面几张照片的 ...
- excel工作表添加目录_长Excel工作表的目录
excel工作表添加目录 In the comments for my post on creating a table of contents in Excel, Eden asked: " ...
- 比较两组数据的差异用什么图更直观_芯片数据分析中常见的一些图的作用
今天给大家讲讲芯片数据分析中常见的一些图的作用,让大家伙儿知道它们在BB些啥. 箱式图(Box plot) 基因芯片的原始数据是需要进行标准化处理的,主要目的是消除由于实验技术(如荧光标记效率.扫描参 ...
- java uml类图虚线实线_终于明白六大类UML类图关系了
UML,全称Unified Modeling Language,统一建模语言.而UML图分为用例图.类图.对象图.状态图.活动图.时序图.协作图.构件图.部署图等9种图. 在面向对象语言中,我们经常看 ...
- wordpress添加媒体_如何在WordPress中添加jQuery FAQ手风琴
wordpress添加媒体 Recently one of our users asked us if there was a way for them to add a FAQ accordion ...
- wordpress添加媒体_如何在WordPress中添加新帖子并利用所有功能
wordpress添加媒体 Are you trying to create a new post in WordPress? Do you want to learn about all the W ...
最新文章
- Lucene.Net无障碍学习和使用:索引篇
- Unity3D在iOS下为啥不能更新的资料收集
- 2021年春季学期-信号与系统-第十五次作业参考答案-第二小题参考答案
- python爬取天气_python3爬取各类天气信息
- jstat和jmap使用
- ANDROID 学习笔记(二) 用户登陆问题 TOKEN SESSION 缓存
- ABAP文档生成工具
- GB28181协议中的事件系统设计
- Java反射初探 ——“当类也学会照镜子”
- HTML:在HTML前端界面中直接显示代码
- Oracle表连接方式总结
- pad 迅雷 bt php_iOS永久版迅雷来了 BT、磁力链下载最全教程收好
- 如何成为嵌入式软件工程师_成为高效软件工程师的三个关键
- 一个串口连接另外两个串口的设计
- android实现推特Twitter分享
- 硬件负载均衡设备介绍
- Visio2016中图标的查找
- HTML5讲解与演示转载整理
- docker提交腾讯云标准模式
- 圆透视变换为椭圆,其缩放比例如何求?