R Markdown pdf部分彩色单元格背景(数据栏)

2024-02-17

Excel 有一个称为“数据栏”的功能,它允许根据具有相应长度的单元格值进行条件格式设置。此功能可以通过 R 中的“formattable”使用格式化程序和 color_bar 来完成。然而,这样做的结果是一个 html 小部件,无法在 pdf 中显示。

这是我尝试过的一些选项:

  1. webshot:截取小部件的屏幕截图,然后我可以将其作为图像导入到 pdf 中。效率不高,formattable 也不是最好的选择,因为它不允许嵌套表

  2. xtable/pander - 不允许我添加条件格式

  3. 电缆 + 电缆额外:

这是我最成功的一个。从这段代码(xtable如何进行单元格着色 https://stackoverflow.com/questions/40895829/how-can-xtable-do-cell-coloring),我可以进行条件格式设置,但它不是颜色栏选项,也不允许我更改列的宽度或进行任何更改,因为它成为 pdf 文档中 html 和 Latex 之间的混合体。

然而,我真正想做的是:https://tex.stackexchange.com/questions/81994/partially-coloring-cell-background-with-histograms https://tex.stackexchange.com/questions/81994/partially-coloring-cell-background-with-histograms

本质上,我希望能够有一个 pdf 文档,它将显示一个表格,该表格将允许嵌套表格功能+数据栏,其中它基于单元格值,并且表格可以调整列宽,或者表格可以缩小以适应在一页上。

这是我现在根据其他代码的答案得到的: 我想知道如何将乳胶代码插入lapply函数中,以便它看起来像第二个链接中的答案~

library(knitr)
library(tidyr)
library(kableExtra)
#options(knitr.table.format="latex")
data(mtcars)
tab =mtcars
tab$mpg<-tab$mpg/100

f <- function(x) cut(x, c(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7,0.8,0.9,1.0), labels=c( "white","green!10", "green!20", "green!30", "green!40", "green!50", "green!60", "green!70","green!80","green!90"),
                  include.lowest = FALSE, right = TRUE)

 tab["mpg"] <- lapply(tab["mpg"], function(x)
                                        paste0("\\cellcolor{", f(x), "}", x))
kable(tab)

感谢您发布如此美好而详细的问题。 这get_databar函数用于用新值替换其中一列,例如

> get_databar(1:5)
[1] "\\databar[white]{1}"    "\\databar[green!30]{2}" "\\databar[green!50]{3}"
[4] "\\databar[green!70]{4}" "\\databar[green!90]{5}"

只是按照您的评论,我已经调整了数据栏https://tex.stackexchange.com/questions/81994/partially-coloring-cell-background-with-histograms https://tex.stackexchange.com/questions/81994/partially-coloring-cell-background-with-histograms,因为它非常棒,而且有点超出了我的乳胶编码能力。

我制作了两个使用 databar 函数的示例

独立的 sweave/knitr 脚本在这里

\documentclass{article}
\usepackage[table,dvipsnames]{xcolor}% http://ctan.org/pkg/xcolor
\usepackage[nomessages]{fp}% http://ctan.org/pkg/
\begin{document}
<<load_libraries, echo = FALSE, eval = TRUE, results ="hide">>=
library(knitr) 
library(xtable)
@
<<get_databar, echo = FALSE, eval = TRUE, results ="hide">>=
#' @title get_databar creates labels for xtable
#' @description colors labels and assigns max_value to .GlobalEnv
#' @param values the vector of values to cut
#' @param color one color that is interpretable by the xcolor dvips
#' one of 68 standard colors known to dvips  \link{https://en.wikibooks.org/wiki/LaTeX/Colors}, Default: 'green'
#' @param min_value min value in the vector, Default: NULL
#' @param max_value max value in the vector, Default: NULL
#' @param column_width the with of the colum to produce
#' @param transparent, do you want transparent labels for low values, Default: TRUE
#' @return A vector to replace orignial column
get_databar <- function(values,
    color = "green",
    min_value=NULL,
    max_value=NULL,
    column_width=10,
    transparent=TRUE)
{
  if (!is.numeric(values)) stop("values should be a numeric")
  if (is.null(min_value)) min_value <- min(values,na.rm=TRUE)-diff(range(values, na.rm=TRUE))/10
  if (is.null(max_value)) max_value <- max(values,na.rm=TRUE)
  # assign max_value in .GlobalEnv
  maxnum <<- max_value
  # sequence of breaks
  mybreaks <- seq(min_value, max_value, length.out=10)
  if (transparent){
      cols <- c(paste0(color,"!",seq(10, 90, by=10)))
      color_cut_factor <- cut(x=values, 
              breaks = mybreaks,
              labels = cols,
              include.lowest = FALSE,
              right = TRUE)
      color_cut <- as.character(color_cut_factor)
  } else {
      color_cut=rep(color, length(values))
  }
  edited_values <- paste0("\\databar[", color_cut,"]{", values,"}")
  return(as.character(edited_values))
} 
@
<<test, echo = FALSE, eval = TRUE, results ="hide">>=
data(mtcars) 
tab = mtcars 
tab0<-tab[1:10,1:3]
tab2<-tab[1:10,1:3]
tab0[,1]<-get_databar(tab0[,1])
tab2[,1]<-get_databar(tab2[,1],
    color="BlueViolet",
    min_value=0, 
    max_value=max(tab2[,1]),
    transparent = FALSE)
print(xtable(tab0, 
        align = c("l","l","l","l"),
        caption = "standard example"), 
    sanitize.text.function = identity, 
    file="table0_with_bar_colors.tex")
print(xtable(tab2, 
        align = c("l","l","l","l"),
        caption = "example with dvips color BlueViolet and transparent = FALSE"),
    sanitize.text.function = identity,
    file="table2_with_bar_colors.tex")
@
%--------------------------------
% This is the new commands blocks
% The first \maxnum will read from R to get the maximum number in the table
% The second creates the databar command, with two parameters, the first default
% parameter is the color, set to green!25
%--------------------------------------
\newcommand{\maxnum}
{%
    \Sexpr{maxnum}
}
\newlength{\maxlen}
% databar[color]{value}
\newcommand{\databar}[2][green!25]
{%
    \settowidth{\maxlen}{\maxnum}%
    \addtolength{\maxlen}{\tabcolsep}%
     \FPeval\result{round(#2/\maxnum:4)}% 
     \rlap{\color{#1}\hspace*{-.5\tabcolsep}\rule[-.05\ht\strutbox]{\result\maxlen}{.95\ht\strutbox}}%
     \makebox[\dimexpr\maxlen-\tabcolsep][r]{#2}%
}
%--------------------------------------
\input{table0_with_bar_colors.tex}
\input{table2_with_bar_colors.tex}
\end{document}

如果您需要放置两个表,那么我有必要在下一个块之后和之前添加\input对于该表,以下命令(\renewcommand代替\newcommand)

\renewcommand{\maxnum}
{%
    \Sexpr{maxnum}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R Markdown pdf部分彩色单元格背景(数据栏) 的相关文章

  • `knitr` 可以抑制 sql 块中的执行或输出吗?

    下面的文档运行 sql 并显示结果 我不希望显示任何输出 要么不运行该块 要么隐藏输出 有没有办法做到这一点 output html document Hide SQL Output First set up a temporary dat
  • 展平具有复杂嵌套结构的列表

    我有一个具有以下示例结构的列表 gt dput test structure list id 1 var1 2 var3 4 section1 structure list var1 1 var2 2 var3 3 Names c var1
  • ggplot2 使用 geom_line 手动指定颜色

    我正在尝试绘制下面的图表 并想手动指定颜色 我需要按基因型绘制 因为有多个基因型属于同一个 Bgrnd All 并且我希望它们在绘制的线条中单独出现 但是 我想按 Bgrnd All 对线条进行着色 特别是按照我在 scale fill m
  • 在 R 中使用 glmnet 和 dotCall64 的长向量

    我使用 glmnet 和 glmnetcr 来拟合序数回归模型 不幸的是 我的模型矩阵约为 640000 5000 这大于可以存储在 32 位整数中的大小 并且我遇到了其他人描述的相同问题 R 向量大小限制 C 中不支持长向量 参数 5 h
  • 递归地更改R中嵌套列表中的名称

    我在 R 中的嵌套列表结构中有数据 我想使用查找表来更改名称 无论它们在结构中的位置 例子 build up an example x lt as list c a NA x 1 lt vector list 4 names x 1 lt
  • 将行从 0 折叠到 0

    对于这样的数据集 Incident ID date product INCFI0000029582 2014 09 25 08 39 45 foo INCFI0000029582 2014 09 25 08 39 48 bar INCFI0
  • 如何在angularjs中读取pdf流

    I got the following PDF stream from a server 如何在 AngularJS 中读取这个流 我尝试使用以下代码在新窗口中将其作为 PDF 文件打开 success function data wind
  • 如何使用 VBA 将符号/图标格式化为单元格而不使用条件格式

    我使用 VBA 代码放置条件格式以覆盖大型表格中的值 每个单元格使用 2 个公式来确定使用 3 个符号中的哪一个 我需要根据列使用不同的单元格检查每个单元格的值 因此据我了解 我必须将条件格式规则单独放置在每个单元格上 以确保每个单元格中的
  • R:函数中使用的 ggplot2 未反映字体大小变量的变化

    我经常需要将多个不同大小的相同 ggplot2 图表输出到 png 文件 通过使用输出高度和宽度 以像素为单位 的变量 可以轻松生成每个 png 文件的大小 对于 ggplot2 部分 我使用字体大小和某些其他元素的变量 并设置一个简单的循
  • 根据另一个输入限制闪亮的应用程序输入

    我有一个基本的闪亮应用程序可以评估A B library shiny ui lt fluidPage numericInput inputId A label A value 5 step 1 sliderInput inputId B l
  • 将 R 中的向量按特定顺序转换为下三角矩阵

    我有一个向量 其中元素的顺序很重要 比如说 x lt c 1 2 3 4 我想将我的向量排列成具有特定顺序的下三角矩阵 其中每行包含向量的前一个元素 我的目标是获得以下矩阵 lower diag matrix 1 2 3 4 1 4 0 0
  • 如何创建一个包含滚动桶集中数据计数的集合

    我有一个月的流量的服务器日志 下面是部分示例 UploadDateGMT UserFileSize TotalBusinessUnits 2012 01 01 00 00 38 1223 1 2012 01 01 00 01 16 1302
  • 为每个具有缺失值的组添加行[重复]

    这个问题在这里已经有答案了 每个篮子可容纳的水果总数为 10 对于每个篮子 如果计数为 10 并且缺少一个水果 我想为该篮子添加一行 该行表示该水果的计数为 0 这是生成数据帧的代码 Basket lt c A A B B C C C Fr
  • 使用绘图数学保留尾随零

    我在用着annotate 将文本覆盖在我的其中一个上ggplot2地块 我正在使用该选项parse T因为我需要使用希腊字母 rho 我想要文字说 0 50 但是尾随零被剪掉 我得到 0 5反而 这是一个例子 library ggplot2
  • 将列拆分为多列

    对于下面给出的数据 data1 lt structure list var1 c 2 7 2 6 7 2 7 2 7 1 7 1 7 1 5 1 2 7 1 5 1 7 1 2 3 4 5 6 7 1 2 4 6 Names var1 cl
  • 如何使用 R 从 github 存储库文件夹中获取列表文件

    我想知道是否存在一个函数或链接或任何可以像这样工作的方法list files R 中的函数 但位于存储在 github 存储库上的文件夹上 示例 github 存储库文件夹 https github com KZPS Spotkania t
  • 从另一个项目调用项目脚本

    我正在构建一个 RStudio 项目 项目 2 我想在其中访问另一个已构建的 RStudio 项目 项目 1 中包含的某些脚本 项目 1 包含各种脚本 其中一些脚本通过source 来电 有什么办法可以实现这一点吗 我最初认为在项目 1 中
  • 根据 R 中另一个数据帧中给出的条件,用 NA 替换数据帧中的多个值

    使用 R 我想根据另一个数据框中包含的条件将数据框中的数值替换为 NA An example data frame with numeric values I want to change to NA based on values giv
  • 如何在 R 中使用相对路径从 mac 上的目录读取数据?

    我正在编写需要同时适用于 Mac 和 Windows 用户的代码 所有用户的计算机上都有 google 驱动器目录的本地副本 我有一段代码可以自动将工作目录设置为源文件位置 我们将此目录称为 directory1 在directory1 中
  • 提取行 r 之间的数据

    我有以下行 rep c foo rep c A B 2 bar rep c C D 2 2 1 foo A B A B bar C D C D foo A 13 B A B bar C D C D 我想提取 foo 和 bar 之间的数据以

随机推荐

  • C++11 std::threads 并等待线程完成

    我有一个计时器对象向量 每个计时器对象都会启动一个模拟生长期的 std thread 我正在使用命令模式 发生的情况是每个计时器都被一个接一个地执行 但我真正想要的是一个被执行 然后一旦完成 下一个 一旦完成下一个 同时不干扰主程序的执行
  • 工具提示内的图像tiptip

    我需要在具有悬停效果的工具提示中插入图像 tel view tipTip defaultPosition top delay 400 fadeIn 400 keepAlive true activation click HTML img s
  • 多个神经网络各有一个输出还是一个有多个输出?

    我想将输入分类为三种可能性之一 使用 3 个网络 每个网络有一个输出 还是 1 个网络 每个网络有 3 个输出 更好 即 3 个网络输出0 or 1或 1 个输出长度为 3 的单热向量的网络 1 0 0 答案是否会根据输入数据分类的复杂程度
  • 无法在 Keras 中复制 matconvnet CNN 架构

    我在 matconvnet 中有以下卷积神经网络架构 我用它来训练我自己的数据 function net cnn mnist init varargin CNN MNIST LENET Initialize a CNN similar fo
  • 在 lambda 中使用 aws-sdk 吗? (AWS.ApiGatewayManagementApi 不是 Response 的构造函数)

    我正在尝试在 lambda 中使用 aws sdk 但我似乎无法弄清楚 var AWS require aws sdk AWS config update var DDB new AWS DynamoDB apiVersion 2012 1
  • 使用 Bootstrap 3 垂直居中元素

    我想将 设计 标签和 21nov 垂直居中 div class row div class col xs 6 col xs offset 1 a href job 52 span class jobtitle designer span a
  • 调整 div 大小以适应最大高度的内容

    我有一个包含动态内容的 div 当内容加载到 div 中时 我希望调整 div 大小以适应内容 但我希望此调整大小具有最大高度 如果内容需要超过这个最大高度 我希望有一个滚动条 我已经搜索过这里的问题 但无法找到我要找的东西 除了提问者回答
  • 带有子目录的 CMake

    我正在尝试设置我的项目以使用 CMake 正确编译 我的目录如下所示 root bin Where I want to build CMake from using cmake build include database database
  • Scala 抽象类型表示子类的类型

    我正在寻找一种方法来定义返回类型 T 的方法 其中 T 子类的类型 我知道我可以使用抽象类型来做到这一点 但不喜欢必须为每个子类重新定义 T 的开销 一些示例代码 object Helper def help A lt MyClass cl
  • Jquery Datepicker 更改月份后触发(月份渲染后)

    我想强调一下本月的一些日子 我可以在第一个月执行此操作 但不能在单击 下个月 或 上个月 后的新月份执行此操作 我尝试使用 onChangeMonthYear 事件 但这在新的 或上一个 月份呈现之前执行 有任何想法吗 也许你最好的选择是b
  • Windbg:psscor4 不起作用

    我搜索并尝试了很多东西 但无法让 psscor4 正常工作 当我调用 threads 我总是得到 请求ThreadStore失败 我检查的内容如下 我有一个为 X86 平台编译的 NET 4 应用程序 我使用的是Windbg版本6 2 92
  • 两组之间均匀分布的数字 (Vectorize LINSPACE) - MATLAB

    如何定义矩阵M根据M a b a 5 b from a to b分 5 步 当a and b是向量或集合 更具体地说 每一行i in M第一个值应该等于a i 和最后的值b i 其间有 5 个相等的步骤 例如 如果我有 a 0 b 10 0
  • 如何将两个 PDF 页面拼接在一起成为一张大页面?

    我有两张 36 x 48 海报 LaTeX 我想将其附加到一张 72 x 48 海报中 垂直堆叠 浏览 SO 和 GS 文档 我没有任何线索 我不是 CLI 向导 我怎样才能做到这一点 此外 该过程不应有损地压缩光栅图像 因为这将以 240
  • switch 似乎比 if 慢

    我很好奇速度switch 相信它 非常 快 但我有一个测试用例 似乎表明单个开关的速度大约与 4 一样快if测试 当我预期 没有充分的理由 它会像 1 次测试一样快 这是我写的两个方法来比较switch with if public sta
  • 挑选一个删除文件的提交

    我需要合并几个存储库 每个存储库都是从TFS http en wikipedia org wiki Team Foundation Server 合而为一 为此 我使用 gitcherry pick 命令 该命令适用于某些提交 但不适用于其
  • 缺少 Google 地图 API V2 google-play-services_lib.jar

    I just imported an example of the google map api V2 for android to test It s missing the google play services lib jar I
  • 按 xml 字母顺序对数据进行排序

    输入 XML
  • 如何配置 django-uploadify 仅用于视频上传?

    我想用django uploadify https github com tstone django uploadify仅上传视频 我只希望它仅上传视频 所有类型的视频 或至少所有类型的流行视频格式 到目前为止 我添加了uploadify
  • 为什么将 (Object)null 结果转换为非空?

    我使用 java 7 并创建一个 varargs 方法 public class JavaApplicationTest param args the command line arguments public static void ma
  • R Markdown pdf部分彩色单元格背景(数据栏)

    Excel 有一个称为 数据栏 的功能 它允许根据具有相应长度的单元格值进行条件格式设置 此功能可以通过 R 中的 formattable 使用格式化程序和 color bar 来完成 然而 这样做的结果是一个 html 小部件 无法在 p