在sweave、xtable中,只轮换部分列名
In sweave, xtable, only rotate some column names
假设我想在 sweave 中创建一个 table,像这样:
<<tab2.1 , results = "asis", echo=FALSE, warning=FALSE>>=
library(xtable)
df <- data.frame(Fish=1:5, Bird=11:15)
rownames(df) <- 2013:2017
print(xtable(df),
rotate.colnames = TRUE)
@
现在,我想在 FishBird 的年份和左侧上方的自由 space 中添加绘图标签,但不旋转。我试着查看 xtable 手册,但它没有显示如何只旋转一些列名。
这是一个解决方法。我首先将年份放入一个列中,然后定义我自己的函数来操作列名。这允许我用其他东西替换第一列名称(在我的代码示例中:rotated[1]
)。
library(xtable)
df <- data.frame(rows = 2013:2017, Fish=1:5, Bird=11:15)
# note that the rownames have their own column
print(xtable(df), include.rownames = F,
sanitize.colnames.function = function(x){
rotated <- paste("\begin{sideways}", x, "\end{sideways}")
# put all column names into sideways environments for the rotation.
return(c("Need coffee!", paste(rotated[-1], collapse="&")))}
# replaces first column name with something else (not rotated).
)
\begin{table}[ht]
\centering
\begin{tabular}{rrr}
\hline
Need coffee! & \begin{sideways} Fish \end{sideways} &\begin{sideways} Bird \end{sideways} \
\hline
2013 & 1 & 11 \
2014 & 2 & 12 \
2015 & 3 & 13 \
2016 & 4 & 14 \
2017 & 5 & 15 \
\hline
\end{tabular}
\end{table}
请注意,您仍然可以使用行名。以下内容同样适用:
df <- data.frame(Fish=1:5, Bird=11:15)
rownames(df) <- 2013:2017
print(xtable(tibble::rownames_to_column(df)), include.rownames = F,
sanitize.colnames.function = function(x){
rotated <- paste("\begin{sideways}", x, "\end{sideways}")
return(c("Need coffee!", paste(rotated[-1], collapse="&")))}
)
如果您不想直接处理 LaTeX 代码,另一种选择是使用 pixiedust
,它可以让您选择要修改的列。
\documentclass{article}
\usepackage{amssymb}
\usepackage{arydshln}
\usepackage{caption}
\usepackage{graphicx}
\usepackage{hhline}
\usepackage{longtable}
\usepackage{multirow}
\usepackage[dvipsnames,table]{xcolor}
\begin{document}
\SweaveOpts{concordance=TRUE}
<<tab2.1, results = tex>>=
df <- data.frame(Year = 2013:2017, Fish=1:5, Bird=11:15)
library(pixiedust)
options(pixiedust_print_method = "latex") # This option must be set in Rnw files
dust(df) %>%
medley_bw() %>%
sprinkle(cols = c("Fish", "Bird"),
rotate_degree = 90,
part = "head") %>%
print() %>%
cat()
@
\end{document}
另一种可能性(使用我自己的 huxtable
包):
library(huxtable)
df <- data.frame(Fish=1:5, Bird=11:15)
rownames(df) <- 2013:2017
ht <- hux(df, add_rownames = TRUE, add_colnames = TRUE)
ht[1, 1] <- 'Your advert here'
number_format(ht) <- 0
rotation(ht)[1, 2:3] <- 90
ht
假设我想在 sweave 中创建一个 table,像这样:
<<tab2.1 , results = "asis", echo=FALSE, warning=FALSE>>=
library(xtable)
df <- data.frame(Fish=1:5, Bird=11:15)
rownames(df) <- 2013:2017
print(xtable(df),
rotate.colnames = TRUE)
@
现在,我想在 FishBird 的年份和左侧上方的自由 space 中添加绘图标签,但不旋转。我试着查看 xtable 手册,但它没有显示如何只旋转一些列名。
这是一个解决方法。我首先将年份放入一个列中,然后定义我自己的函数来操作列名。这允许我用其他东西替换第一列名称(在我的代码示例中:rotated[1]
)。
library(xtable)
df <- data.frame(rows = 2013:2017, Fish=1:5, Bird=11:15)
# note that the rownames have their own column
print(xtable(df), include.rownames = F,
sanitize.colnames.function = function(x){
rotated <- paste("\begin{sideways}", x, "\end{sideways}")
# put all column names into sideways environments for the rotation.
return(c("Need coffee!", paste(rotated[-1], collapse="&")))}
# replaces first column name with something else (not rotated).
)
\begin{table}[ht]
\centering
\begin{tabular}{rrr}
\hline
Need coffee! & \begin{sideways} Fish \end{sideways} &\begin{sideways} Bird \end{sideways} \
\hline
2013 & 1 & 11 \
2014 & 2 & 12 \
2015 & 3 & 13 \
2016 & 4 & 14 \
2017 & 5 & 15 \
\hline
\end{tabular}
\end{table}
请注意,您仍然可以使用行名。以下内容同样适用:
df <- data.frame(Fish=1:5, Bird=11:15)
rownames(df) <- 2013:2017
print(xtable(tibble::rownames_to_column(df)), include.rownames = F,
sanitize.colnames.function = function(x){
rotated <- paste("\begin{sideways}", x, "\end{sideways}")
return(c("Need coffee!", paste(rotated[-1], collapse="&")))}
)
如果您不想直接处理 LaTeX 代码,另一种选择是使用 pixiedust
,它可以让您选择要修改的列。
\documentclass{article}
\usepackage{amssymb}
\usepackage{arydshln}
\usepackage{caption}
\usepackage{graphicx}
\usepackage{hhline}
\usepackage{longtable}
\usepackage{multirow}
\usepackage[dvipsnames,table]{xcolor}
\begin{document}
\SweaveOpts{concordance=TRUE}
<<tab2.1, results = tex>>=
df <- data.frame(Year = 2013:2017, Fish=1:5, Bird=11:15)
library(pixiedust)
options(pixiedust_print_method = "latex") # This option must be set in Rnw files
dust(df) %>%
medley_bw() %>%
sprinkle(cols = c("Fish", "Bird"),
rotate_degree = 90,
part = "head") %>%
print() %>%
cat()
@
\end{document}
另一种可能性(使用我自己的 huxtable
包):
library(huxtable)
df <- data.frame(Fish=1:5, Bird=11:15)
rownames(df) <- 2013:2017
ht <- hux(df, add_rownames = TRUE, add_colnames = TRUE)
ht[1, 1] <- 'Your advert here'
number_format(ht) <- 0
rotation(ht)[1, 2:3] <- 90
ht