R:xtable 中的对角线列名

标签 r latex knitr pdflatex xtable

R-3.1.1、Win7 x64、knitr 版本 1.6、xtable 版本 1.7-3

我正在尝试按照讨论 here 中的想法构建一个具有角度列名称的表。 。我的工作流程建立在 knit/Latex 上,以自动化我的报告,所以我想将这些想法融入 xtable 中。我的代码如下:

\documentclass[a4paper,11pt]{article}

\usepackage{graphicx}
\usepackage[T1]{fontenc}
\usepackage{tabularx}
\usepackage{longtable}
\usepackage{rotating}
\usepackage{makecell}
\renewcommand{\rothead}[2][60]{\makebox[9mm][c]{\rotatebox{#1}{\makecell[c]{#2}}}}%


\begin{document}

<<global_opts, echo=FALSE>>=
opts_chunk$set(fig.keep='none', results='hide', echo=FALSE)
@

<<tab01>>=
require(xtable, quietly = TRUE)
test <- matrix(95:110, ncol = 4) 
rownames(test) <- paste0("row ", 1:4)
colnames(test) <- paste0("\\multicolumn{2}{c}{\\rotatebox{60}{column ", 1:4, "}}")
tab10 <- xtable(test)
tab10 <- print(tab10, sanitize.colnames.function = function(x){x})
@

{\Sexpr{tab10}}
\end{document}

这有点完成工作,但没有我希望的那么好。输出如下:

enter image description here

当然,我希望列名称彼此相邻,而不是彼此重叠。 此外,我还收到以下警告:

knit2pdf("diagonal_headers.Rnw")

Warning message:
running command '"C:\PROGRA~1\MIKTEX~1.9\miktex\bin\x64\texi2dvi.exe" --quiet --pdf     "tab_tests_diagonaal.tex" --max-iterations=20 -I "C:/PROGRA~1/R/R-31~1.1/share/texmf/tex/latex" -I "C:/PROGRA~1/R/R-31~1.1/share/texmf/bibtex/bst"' had status 1 

总的来说,我已经很接近了。我该怎么做才能修复表格布局?

最佳答案

这是完成此任务的一种方法。前导码没有改变,所以我在这里只显示代码块。

代码的准系统版本是:

<<tab01_barebones>>=
require(xtable, quietly = TRUE)
test <- matrix(95:110, ncol = 4)
rownames(test) <- paste0("row ", 1:4)
cols <- paste0("\\rothead{column ", 1:4, "}", collapse = " & ")
cols <- paste0("\\rothead{} & ", cols, "\\\\")
tab10 <- xtable(test)
tab10 <- print(tab10, include.colnames = FALSE, add.to.row = list(pos = as.list(0), command = cols), sanitize.colnames.function = function(x) {x}, booktabs = FALSE, hline.after = NULL)
@

产生:

enter image description here

您的代码存在一些问题。实际上,您还需要行名称上方的单元格的代码,这基本上是标题列中其他单元格的空版本:\\multicolumn{1}{c}{\\rothead{}} 。另外,\\multicolumn{2}必须是\\multicolumn{1} ,因为您实际上并未合并单元格。事实上,您可以取消 \\multicolumn{1}完全保留\\rothead .

您会发现布局变得有点笨拙,因为有角度的标题。这是让它变得更漂亮的一种方法:

<<tab01>>=
require(xtable, quietly = TRUE)
test <- matrix(95:110, ncol = 4)
rownames(test) <- paste0("row ", 1:4)
cols <- paste0("\\multicolumn{1}{c}{\\rothead{column ", 1:4, "}}", collapse = " & ")
cols <- paste0("\\multicolumn{1}{c}{\\rothead{}} & ", cols, "\\\\")
tab10 <- xtable(test)
align(tab10) <- "r|cccc|"
tab10 <- print(tab10, include.colnames = FALSE, add.to.row = list(pos = as.list(c(0,0,4)),     command = c(cols, "\\cline{2-5}","\\cline{2-5}")), 
           sanitize.colnames.function = function(x) {x}, booktabs = FALSE, hline.after = NULL)
@

我恢复了\\multicolumn{1}在这里,垂直线不会延伸到标题单元格(b/c 很丑,带有这些倾斜的标题)。我还添加了cline ,产生部分水平线。结果表是:

enter image description here

也许使用 align(tab10) <- "r|llll|" 更好相反,尽管我不太喜欢左对齐数字:

enter image description here

彼得·HTH

关于R:xtable 中的对角线列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25702338/

相关文章:

从格子图中删除内边距

list - 仅从 LaTeX 的列表中选择一些项目

javascript - 如何在html中嵌入latex公式?

r - 使用 pandoc 和 RStudio Markdown 转换为 MS Word 的语法是什么?它如何用于包含引用书目和内联引用?

r - 在向量的每个分量后面添加 "\\\hline "

r - ggplot2 - 在绘图之外进行注释

r - 通过 .Rmd 在 header 中插入标签

r - 如何阻止 knitr 添加基于 documentClass 的 tex 包?

r - 如何在gcp vm中部署docker镜像

latex - 如何在数学中换行