我正在尝试构建一个表格来报告在不同数据集上测试的机器学习模型的基准。对于我的具体情况,我正在考虑三个不同数据集上的三个指标。
\begin{table}[!h]
\centering
\begin{tabular}{|l|l|l|l|l|l|l|}
\hline
Models &
\multicolumn{3}{c}{\textbf{Metric 1}} &
\multicolumn{3}{c|}{\textbf{Metric 2}} &
\multicolumn{3}{c|}{\textbf{Metric 3}} \\
& D1 & D2 & D3 & D1 & D2 & D3 \\
\hline
Model1 & 1.03 & / & 1.60 & / & 2.30 & / \\
\hline
Model2 & \textbf{2.14} & \textbf{3.8} & \textbf{1.40} & \textbf{3.15} & 0.34 & 2.3 \\
\hline
Model3 & \textbf{3.45} & \textbf{1.50} & \textbf{3.15} & \textbf{1.2} & -2.15 & 3.00 \\
\hline
\end{tabular}
\end{table}
以下是得到的结果:
由于我对 LaTeX 表格还不太熟悉,所以我无法轻易找出我在这里做错了什么。
编辑:
正如评论中所建议的,我尝试添加另一个三元组数据集以匹配总多列数(9),但仍然不起作用:
代码:
\begin{table}[!h]
\centering
\begin{tabular}{|l|l|l|l|l|l|l|}
\hline
Models &
\multicolumn{3}{c}{\textbf{Metric 1}} &
\multicolumn{3}{c}{\textbf{Metric 2}} &
\multicolumn{3}{c|}{\textbf{Metric 3}} \\
& D1 & D2 & D3 & D1 & D2 & D3 & D1 & D2 & D3\\
\hline
Model1 & 1.03 & / & 1.60 & / & 2.30 & / \\
\hline
Model2 & \textbf{2.14} & \textbf{3.8} & \textbf{1.40} & \textbf{3.15} & 0.34 & 2.3 \\
\hline
Model3 & \textbf{3.45} & \textbf{1.50} & \textbf{3.15} & \textbf{1.2} & -2.15 & 3.00 \\
\hline
\end{tabular}
\end{table}
结果:
答案1
如果您想要三个指标下的两组数据,则需要声明七列并用作\multicolumn{2}{...}
标题。如果是三组数据,则需要声明十列。
永远不要忽视错误。
这是我的建议:一个用于三人组,两个用于两人组;最后一个采用笼式格式,只是为了表明它不太有吸引力。
siunitx
无论如何我建议使用。
\documentclass{article}
\usepackage{booktabs,siunitx}
\begin{document}
\begin{table}[!htp]
\centering
\sisetup{detect-all}
\NewDocumentCommand{\B}{}{\fontseries{b}\selectfont}
\begin{tabular}{
@{}
l
S[table-format=1.2]
S[table-format=1.2]
S[table-format=1.2]
S[table-format=1.2]
S[table-format=-1.2]
S[table-format=1.2]
S[table-format=1.2]
S[table-format=1.2]
S[table-format=1.2]
@{}
}
\toprule
Models & \multicolumn{9}{c}{Metrics} \\
\cmidrule(l){2-10}
& \multicolumn{3}{c}{1} & \multicolumn{3}{c}{2} & \multicolumn{3}{c}{3} \\
\cmidrule(lr){2-4} \cmidrule(lr){5-7} \cmidrule(l){8-10}
& {D1} & {D2} & {D3} & {D1} & {D2} & {D3} & {D1} & {D2} & {D3} \\
\midrule
Model1 & 1.03 & {/} & 1.60 & {/} & 2.30 & {/} \\
Model2 & \B 2.14 & \B 3.8 & \B 1.40 & \B 3.15 & 0.34 & 2.3 \\
Model3 & \B 3.45 & \B 1.50 & \B 3.15 & \B 1.2 & -2.15 & 3.00 \\
\bottomrule
\end{tabular}
\caption{Models and metrics (triples of data)}
\end{table}
\begin{table}[!htp]
\centering
\sisetup{detect-all}
\NewDocumentCommand{\B}{}{\fontseries{b}\selectfont}
\begin{tabular}{
@{}
l
S[table-format=1.2]
S[table-format=1.2]
S[table-format=1.2]
S[table-format=1.2]
S[table-format=-1.2]
S[table-format=1.2]
@{}
}
\toprule
Models & \multicolumn{6}{c}{Metrics} \\
\cmidrule(l){2-7}
& \multicolumn{2}{c}{1} & \multicolumn{2}{c}{2} & \multicolumn{2}{c}{3} \\
\cmidrule(lr){2-3} \cmidrule(lr){4-5} \cmidrule(l){6-7}
& {D1} & {D2} & {D1} & {D2} & {D1} & {D2} \\
\midrule
Model1 & 1.03 & {/} & 1.60 & {/} & 2.30 & {/} \\
Model2 & \B 2.14 & \B 3.8 & \B 1.40 & \B 3.15 & 0.34 & 2.3 \\
Model3 & \B 3.45 & \B 1.50 & \B 3.15 & \B 1.2 & -2.15 & 3.00 \\
\bottomrule
\end{tabular}
\caption{Models and metrics (pairs of data)}
\end{table}
\begin{table}[!htp]
\centering
\sisetup{detect-all}
\NewDocumentCommand{\B}{}{\fontseries{b}\selectfont}
\begin{tabular}{
|l|
S[table-format=1.2]|
S[table-format=1.2]|
S[table-format=1.2]|
S[table-format=1.2]|
S[table-format=-1.2]|
S[table-format=1.2]|
}
\hline
Models &
\multicolumn{2}{c|}{Metric 1} &
\multicolumn{2}{c|}{Metric 2} &
\multicolumn{2}{c|}{Metric 3} \\
\cline{2-7}
& {D1} & {D2} & {D1} & {D2} & {D1} & {D2} \\
\hline
Model1 & 1.03 & {/} & 1.60 & {/} & 2.30 & {/} \\
\hline
Model2 & \B 2.14 & \B 3.8 & \B 1.40 & \B 3.15 & 0.34 & 2.3 \\
\hline
Model3 & \B 3.45 & \B 1.50 & \B 3.15 & \B 1.2 & -2.15 & 3.00 \\
\hline
\end{tabular}
\caption{Caged models and metrics (pairs of data)}
\end{table}
\end{document}
答案2
命令中定义的跨度列数不匹配,\multicolumn{}{}{}
并且表中使用的与号也不匹配(正如@Marijn 在其评论中指出的那样)。
下面是更正后的表格代码(我猜您之后会这样做)以及一个在表格中使用tabullaray
和包装的示例:siunitx
\documentclass{article}
%-------------------------------- not needed in the first example
\usepackage{tabularray}
\UseTblrLibrary{siunitx, varwidth}
\usepackage{etoolbox}
\newrobustcmd\B{\DeclareFontSeriesDefault[rm]{bf}{b}\bfseries} %
%---------------------------------------------------------------%
\begin{document}
With \verb+\tabular+ environment;
\begin{table}[ht]
\centering
\begin{tabular}{|l |l|l |l|l |l|l|}
\hline
Models & \multicolumn{2}{c}{\textbf{Metric 1}}
& \multicolumn{2}{c|}{\textbf{Metric 2}}
& \multicolumn{2}{c|}{\textbf{Metric 3}} \\
& D1 & D2 & D1 & D2 & D1 & D2 \\
\hline
Model1 & 1.03 & / & 1.60 & / & 2.30 & / \\
\hline
Model2 & \textbf{2.14}
& \textbf{3.8}
& \textbf{1.40}
& \textbf{3.15}
& 0.34 & 2.3 \\
\hline
Model3 & \textbf{3.45} & \textbf{1.50} & \textbf{3.15} & \textbf{1.2} & -2.15 & 3.00 \\
\hline
\end{tabular}
\end{table}
With use of the \verb+\tabularray+ and \verb+siunitx+ packages;
\begin{table}[ht]
\centering
\sisetup{detect-all}
\begin{tblr}{hlines, vlines,
colspec = {l *{4}{Q[c, si={table-format=1.2}]}
Q[c, si={table-format=-1.2}]
Q[c, si={table-format=1.2}]
},
row{1} = {guard, font=\bfseries},
row{1,2}= {guard}
}
\SetCell[r=2]{c} Models
& \SetCell[c=2]{c} Metric 1
& & \SetCell[c=2]{c} Metric 3
& \\
\SetCell[c=2]{c} Metric 3 \\
& D1 & D2 & D1 & D2 & D1 & D2 \\
Model1 & 1.03 & / & 1.60 & / & 2.30 & / \\
Model2 &\B 2.14 &\B 3.8 &\B 1.40 &\B 3.15 & 0.34 & 2.3 \\
Model3 &\B 3.45 &\B 1.50 &\B 3.15 &\B 1.2 & -2.15 & 3.00 \\
\end{tblr}
\end{table}
\end{document}
附录: 显然我的猜测是错误的。下面是表格内容三元组的示例:
\documentclass{article}
%-------------------------------- not needed in the first example
\usepackage{tabularray}
\UseTblrLibrary{siunitx, varwidth}
\usepackage{etoolbox}
\newrobustcmd\B{\DeclareFontSeriesDefault[rm]{bf}{b}\bfseries}
%---------------------------------------------------------------%
\begin{document}
With \verb+\tabular+ environment;
\begin{table}[ht]
\centering
\begin{tabular}{|l |l|l|l |l|l|l |l|l|l|}
\hline
Models & \multicolumn{3}{c}{\textbf{Metric 1}}
& \multicolumn{3}{c|}{\textbf{Metric 2}}
& \multicolumn{3}{c|}{\textbf{Metric 3}} \\
& D1 & D2 & D3 & D1 & D2 & D3 & D1 & D2 & D3 \\
\hline
Model1 & 1.03 & / & 1.60 & / & 2.30 & / & & & \\
\hline
Model2 & \textbf{2.14}
& \textbf{3.8}
& \textbf{1.40}
& \textbf{3.15}
& 0.34 & 2.3 & & & \\
\hline
Model3 & \textbf{3.45} & \textbf{1.50} & \textbf{3.15} & \textbf{1.2}
& -2.15 & 3.00 & & & \\
\hline
\end{tabular}
\end{table}
With use of the \verb+\tabularray+ and \verb+siunitx+ packages:
\begin{table}[ht]
\centering
\sisetup{detect-all}
\begin{tblr}{hlines, vlines,
colspec = {l *{4}{Q[c, si={table-format=1.2}]}
Q[c, si={table-format=-1.2}]
*{4}{Q[c, si={table-format=1.2}]}
},
row{1} = {guard, font=\bfseries},
row{1,2}= {guard}
}
\SetCell[r=2]{c} Models
& \SetCell[c=3]{c} Metric 1
& & & \SetCell[c=3]{c} Metric 2
& & & \SetCell[c=3]{c} Metric 3
& & \\
& D1 & D2 & D3 & D1 & D2 & D3 & D1 & D2 & D3 \\
Model1 & 1.03 & / & 1.60 & / & 2.30 & / & & & \\
Model2 &\B 2.14 &\B 3.8 &\B 1.40 &\B 3.15 & 0.34 & 2.3 & & & \\
Model3 &\B 3.45 &\B 1.50 &\B 3.15 &\B 1.2 & -2.15 & 3.00 & & & \\
\end{tblr}
\end{table}
\end{document}