迷你图添加趋势线

通常,表中需要的只是文本和数字形式的数据。 但是有时候,您也想在每一行中可视化结果。 当每一行数据都是随着时间变化的趋势时,尤其如此。

您可以在带有迷你内联图(称为迷你图)的新表列中执行此操作。 您可能在Excel中很熟悉它们,但是您也可以在交互式HTML表中创建它们-带有sparkline程序包和四个基本步骤:

[ 在我们的视频教程系列中获得Sharon Machlis的R技巧 。 | 阅读InfoWorld教程: 学习使用R处理大数据 。 • 如何重塑R中的数据 。 • 触手可及的R数据操作技巧 • R的 初学者指南 。 | 通过InfoWorld大数据报告新闻通讯了解最新的分析和大数据。 ]

  1. 在数据框中添加具有迷你图数据和格式的列。
  2. 在表选项中添加一个JavaScript代码段。 一直都是相同的代码,因此您可以保存一次并重复使用它。
  3. 这很简单:将escape = FALSE添加为datatable()参数,以便HTML 显示为HTML而不是实际代码
  4. 这也很容易:将结果通过管道传递给添加必要依赖项的函数,以便表显示迷你图。

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循环,但是如果数据“整洁”,实际上这样做会更容易。 也就是说,每行仅包含一个观测值,而不是现在的方式:每行包含多个观测值。

Sharon Machlis / IDG

此价格数据表显示数据不是“整洁”的-每行有多个观察值。

在下面的代码中,我使用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 代码本身就是代码 ,而不是正在执行代码

Sharon Machlis / IDG

迷你图代码显示为HTML代码,而不是作为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)

您应该看到迷你图。

Sharon Machlis / IDG

在R中创建带有迷你图HTML表

您也可以将鼠标悬停在图形上以查看实际数据点。

[有关更多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表添加迷你图相关推荐

  1. sip 时序图_时序图怎么看_教你如何看懂时序图 - 什么是时序图_时序图怎么看_教你如何看懂时序图...

    时序图怎么看_教你如何看懂时序图 操作时序永远使用是任何一片IC芯片的最主要的内容.一个芯片的所有使用细节都会在它的官方器件手册上包含.所以使用一个器件事情,要充分做好的第一件事就是要把它的器件手册上 ...

  2. r 语言 ggplot上添加平均值_技术贴 | R语言:ggplot堆叠图、冲积图、分组分面、面积图...

    点击蓝字↑↑↑"微生态",轻松关注不迷路 利用R语言堆叠图,我们可以将一个项目中所有样品的物种组成展示出来.下面介绍如何利用R语言进行物种组成分析和可视化.过程分为以下几步: 1) ...

  3. 密度图的密度估计_不同类型的二维密度图小教程

    R相关小教程链接: 用R构建气泡图案例小教程 [小教程]散点图.饼图怎么在我的文章中完美展示小教程 热图在论文发表中完美呈现小教程 R与密度.函数.变量的微妙关系 北京市计算中心医用数据库建设解决方案 ...

  4. 苹果手机怎么在照片上添加文字_要给照片快速添加文字、图框、印章,用这款手机软件比较方便...

    现在手机的拍照功能越来越先进,人们走到哪儿,都会随拍几张照片,那么,如何后期才能让照片更加的赏心悦目呢?主要从添加文字.漂亮的文字排版.添加相框.以及添加印章元素等几个方面去处理.比如像下面几张照片的 ...

  5. excel工作表添加目录_长Excel工作表的目录

    excel工作表添加目录 In the comments for my post on creating a table of contents in Excel, Eden asked: " ...

  6. 比较两组数据的差异用什么图更直观_芯片数据分析中常见的一些图的作用

    今天给大家讲讲芯片数据分析中常见的一些图的作用,让大家伙儿知道它们在BB些啥. 箱式图(Box plot) 基因芯片的原始数据是需要进行标准化处理的,主要目的是消除由于实验技术(如荧光标记效率.扫描参 ...

  7. java uml类图虚线实线_终于明白六大类UML类图关系了

    UML,全称Unified Modeling Language,统一建模语言.而UML图分为用例图.类图.对象图.状态图.活动图.时序图.协作图.构件图.部署图等9种图. 在面向对象语言中,我们经常看 ...

  8. wordpress添加媒体_如何在WordPress中添加jQuery FAQ手风琴

    wordpress添加媒体 Recently one of our users asked us if there was a way for them to add a FAQ accordion ...

  9. wordpress添加媒体_如何在WordPress中添加新帖子并利用所有功能

    wordpress添加媒体 Are you trying to create a new post in WordPress? Do you want to learn about all the W ...

最新文章

  1. Lucene.Net无障碍学习和使用:索引篇
  2. Unity3D在iOS下为啥不能更新的资料收集
  3. 2021年春季学期-信号与系统-第十五次作业参考答案-第二小题参考答案
  4. python爬取天气_python3爬取各类天气信息
  5. jstat和jmap使用
  6. ANDROID 学习笔记(二) 用户登陆问题 TOKEN SESSION 缓存
  7. ABAP文档生成工具
  8. GB28181协议中的事件系统设计
  9. Java反射初探 ——“当类也学会照镜子”
  10. HTML:在HTML前端界面中直接显示代码
  11. Oracle表连接方式总结
  12. pad 迅雷 bt php_iOS永久版迅雷来了 BT、磁力链下载最全教程收好
  13. 如何成为嵌入式软件工程师_成为高效软件工程师的三个关键
  14. 一个串口连接另外两个串口的设计
  15. android实现推特Twitter分享
  16. 硬件负载均衡设备介绍
  17. Visio2016中图标的查找
  18. HTML5讲解与演示转载整理
  19. docker提交腾讯云标准模式
  20. 圆透视变换为椭圆,其缩放比例如何求?

热门文章

  1. @keyframes深层理解
  2. 欧格教育:店铺装修注意哪些细节
  3. 一键评估模型是否有破损,掌握这个小工具就够了【SW技巧分享】
  4. mongoDB之ObjectId
  5. vue+element-ui实现一键切换皮肤
  6. 以太坊之DAPP开发(完整例子)
  7. 模拟滚动电子显示屏(自定义文本、置顶、透明度、颜色、速度、位置等)
  8. TextCNN原理、结构、代码
  9. mysql查看表结构 desc 表名;
  10. 删除 Word 空白页