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}
这有点完成工作,但没有我希望的那么好。输出如下:
当然,我希望列名称彼此相邻,而不是彼此重叠。 此外,我还收到以下警告:
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)
@
产生:
您的代码存在一些问题。实际上,您还需要行名称上方的单元格的代码,这基本上是标题列中其他单元格的空版本:\\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
,产生部分水平线。结果表是:
也许使用 align(tab10) <- "r|llll|"
更好相反,尽管我不太喜欢左对齐数字:
彼得·HTH
关于R:xtable 中的对角线列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25702338/