我正在尝试绘制如下图所示的表格。我一直在使用表格和 tikz,但从未将两者结合起来绘制带有节点的表格。
绘制这样的表格的最佳方法是什么?
我创建了一个最小工作示例,但仍然存在一些问题。
- 我不知道如何控制单元格内线条的对齐
- 圆圈不见了
- 我没有包括水平线和垂直线,因为我也不知道如何对齐它们。
任何帮助都非常感谢。如有必要,我也可以使用其他软件包。这只是我的第一个想法。
代码:
\documentclass{article}
\usepackage{array,multirow,graphicx}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\begin{document}
\begin{table}[h]
\centering
\begin{tabular}{c|l|cccccc}
Kategorie& \multicolumn{1}{c|}{Einflussgroesse} & \multicolumn{6}{c}{Auspraegung in Fallstudie} \\
&&&1&2&3&4&\\
\hline
\multirow{4}{*}{\rotatebox[origin=c]{90}{\parbox[c]{1.5cm}{\centering Markt-bezogene }}} & text &gering&&\tikzmark{1}&&&hoch\\
& text &gering&&\tikzmark{2}&&&hoch\\
& text &gering&&&\tikzmark{3}&&hoch\\
& text &gering&&&\tikzmark{4}&&hoch\\
\end{tabular}
\begin{tikzpicture}[overlay, remember picture]
\draw [-] ({pic cs:1}) -- ({pic cs:2});
\draw [-] ({pic cs:2}) -- ({pic cs:3});
\draw [-] ({pic cs:3}) -- ({pic cs:4});
\end{tikzpicture}
\end{table}
\end{document}
答案1
如果你把桌子放在蒂克兹 matrix of nodes
(请参阅 tikz/pgf 手册第 20 章),然后您就可以tikz
使用 的全部功能。 从各方面来看,matrix of nodes
看起来都像一个“普通”的 LaTeX 矩阵,除了:
- 它位于一个
tikzpicture
环境里面。 - 您可以按照通常的 tikz 风格来设置行、列、节点等的样式
- 在矩阵的条目之间画线等很简单。
这是我对您的 MWE 进行实验的结果:
...产生该结果的代码如下:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc,matrix}
\newcommand\hochscale[1]{%\hochscale{a,b,c,d,...}
\foreach \r in {1,2,3,4} {% put numbers under heading
\node at ($ (M-1-3.west)+(\r,-0.4) $) {\r};
}
% now draw scale in each row
\foreach \hoch [count=\r from 2, remember=\r as \last] in {#1} {
\node[anchor=west] at ($ (M-\r-3.west)+(-0.8,0) $) {gering};
\node[anchor=east] at ($ (M-\r-3.west)+(5.5,0) $) {hoch};
\draw (M-\r-3.west)+(0.5,0) -- ++(4.5,0);
\node[mypoint] (hoch\r) at ($ (M-\r-3.west)+(\hoch,0) $) {};
\ifnum\r>2% draw the lines between scales starting from row 3
\draw[blue](hoch\last)--(hoch\r);
\fi
}
% add the dashed line
\draw[dashed](M-2-3.west)+(2.5,0.5)--($ (M-\last-3.west)+(2.5,-0.5) $);
}
\begin{document}
\begin{tikzpicture}[mypoint/.style={circle, radius=0.5mm, fill=blue}]
\matrix (M)[matrix of nodes, nodes in empty cells,
row sep=8mm, column sep=6mm,
row 1/.style = {anchor=center, font=\large\bfseries, blue,
minimum height=12mm},% to allow for numbers
column 1/.style = {text width=15mm},
column 2/.style = {text width=60mm},
column 3/.style = {text width=60mm},
]{
Kategorie & Einflussgroesse & Auspraegung in Fallstudie\\
& text 1 & \\
& text 2 & \\
& text 3 & \\
& text 4 & \\
& text 5 & \\
};
\draw[blue, thick](M-1-1.south west) -- (M-1-3.south east);
\node[rotate=90, anchor=east] at (M-3-1) {Markt-bezogene};
\hochscale{1,2,3,2,4}% add scales in column 3
\end{tikzpicture}
\end{document}
一些评论:
(M)
命令后面的表示\matrix
矩阵的节点可以称为(M-1-1)
、、(M-1-2)
...更一般地说(M-row-col)
,其中row
和col
是任意行和列索引。您可以M
用任何您喜欢的替换。- 该
\hochscale
命令打印第 3 列中的刻度。它接受以逗号分隔的“刻度值”列表,然后执行其余操作。此命令基本上是一个\foreach
运行值的语句。它使用(M-\r-3)
语法来引用第 3 行和第 3 列中的节点\r
。表单的节点位置($ .... $)
使用 tikzcalc
库。 - 我给第 1 行添加了一些随机样式。一般来说,样式是随机的,您可以根据需要进行更改。(特别是,目前蓝色太多了!)
- 实际上,您可能需要更改列宽,以便更好地适应您的文本。特别是,您可能需要缩小第 3 列的比例,否则我认为您的文本将无法适应。
- 正如书签手册中,通常最好避免在表格中出现垂直线。
- 关于样式可能性的一个更好的例子可能是:
这是通过对 tikz 样式定义进行一些细微的调整得出的:
\documentclass{article}
\usepackage[svgnames]{xcolor}
\usepackage{tikz}
\usetikzlibrary{calc,matrix}
\newcommand\hochscale[1]{%\hochscale{a,b,c,d,...}
\foreach \r in {1,2,3,4} {
\node at ($ (M-1-3.west)+(\r,-0.4) $) {\r};
}
\foreach \hoch [count=\r from 2, remember=\r as \last] in {#1} {
\node[anchor=west] at ($ (M-\r-3.west)+(-0.8,0) $) {gering};
\node[anchor=east] at ($ (M-\r-3.west)+(5.5,0) $) {hoch};
\draw (M-\r-3.west)+(0.5,0) -- ++(4.5,0);
\node[mypoint] (hoch\r) at ($ (M-\r-3.west)+(\hoch,0) $) {};
\ifnum\r>2%
\draw[Peru](hoch\last)--(hoch\r);
\fi
}
\draw[dashed](M-2-3.west)+(2.5,0.5)--($ (M-\last-3.west)+(2.5,-0.5) $);
}
\begin{document}
\begin{tikzpicture}[mypoint/.style={circle, radius=0.5mm, draw=Peru, thick, fill=Tan}]
\matrix (M)[matrix of nodes, nodes in empty cells,
row sep=2mm, column sep=8mm,
row 1/.style = {anchor=center, font=\large\bfseries, Peru,
minimum height=12mm},% to allow for numbers
column 1/.style = {text width=15mm},
row 1 column 2/.style = {nodes={fill=white,draw=white},text width=50mm},
column 2/.style = {nodes={rectangle,draw=Peru,fill=PapayaWhip},text width=50mm},
column 3/.style = {text width=60mm},
]{
Kategorie & Einflussgroesse & Auspraegung in Fallstudie\\
& text 1 & \\
& text 2 & \\
& text 3 & \\
& text 4 & \\
& text 5 & \\
};
\draw[Sienna, thick](M-1-1.south west) -- (M-1-3.south east);
\node[rotate=90, anchor=south] at (M-4-1) {Markt-bezogene};
\hochscale{1,2,3,2,4}
\end{tikzpicture}
\end{document}