![我可以通过 PGF \nextgroupplot 功能添加表格吗?](https://linux22.com/image/421076/%E6%88%91%E5%8F%AF%E4%BB%A5%E9%80%9A%E8%BF%87%20PGF%20%5Cnextgroupplot%20%E5%8A%9F%E8%83%BD%E6%B7%BB%E5%8A%A0%E8%A1%A8%E6%A0%BC%E5%90%97%EF%BC%9F.png)
我已经制作了一个最小的工作示例来显示我现在的进展情况:
\RequirePackage{luatex85}
\documentclass[tikz]{standalone}
% Default preamble
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepgfplotslibrary{groupplots}
\usepgfplotslibrary{polar}
\usepgfplotslibrary{smithchart}
\usepgfplotslibrary{statistics}
\usepgfplotslibrary{dateplot}
% Custom preamble from global variable:
\usepackage{pgfplotstable}
\begin{document}
\begin{tikzpicture}
\begin{groupplot}[group style={group size={2 by 2}}, height={4cm}, width={4cm}]
\nextgroupplot[title={1}]
\addplot+
coordinates {
(0,0)
(1,1)
(2,2)
}
;
\nextgroupplot[title={2}]
% \pgfplotstabletypeset[
% col sep=&, % specify the column separation character
% row sep=\\, % specify the row separation character
% columns/E/.style={string type} % specify the type of data in the designated column
% ]{
% A & B & C & D & E \\
% 1 & 10 & 0.1 & 1000 & 2011-01-01 \\
% 2 & 20 & 0.2 & 2000 & 2012-02-02 \\
% 3 & 30 & 0.3 & 3000 & 2013-03-03 \\
% 4 & 40 & 0.4 & 4000 & 2014-04-04 \\
% 5 & 50 & 0.5 & 5000 & 2015-05-05 \\
% }
\nextgroupplot[title={3}]
\addplot+
coordinates {
(0,2)
(1,1)
(2,1)
}
;
\nextgroupplot[title={4}]
\addplot+
coordinates {
(0,2)
(1,1)
(1,0)
}
;
\end{groupplot}
\end{tikzpicture}
\end{document}
运行此代码产生下图:
我想插入一个表格,而不是右上角的空数字(“2”)。这个表格已经在我的代码中定义,但被注释掉了(用%
)——如果我取消注释并再次运行我的 LaTeX 代码,结果将变成:
有人知道如何继续这个工作流程\nextgroupplot
并能解决这个问题,以便我可以插入表格而不是图形吗?
亲切的问候
答案1
你可以用以下方法删除空轴
\nextgroupplot[hide axis]
然后在 后面的节点中添加表格\end{groupplot}
。轴名为group cNrM
,其中N
和M
分别是列号和行号,因此您可以使用例如
\node [below right, xshift=-5mm] at (group c2r1.north west) { <table code> };
无论您是否使用\pgfplotstabletypeset
或tabular
直接使用都没关系,但是您不能table
在节点中拥有环境。
\documentclass[tikz]{standalone}
% Default preamble
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepgfplotslibrary{groupplots}
\usepgfplotslibrary{polar}
\usepgfplotslibrary{smithchart}
\usepgfplotslibrary{statistics}
\usepgfplotslibrary{dateplot}
% Custom preamble from global variable:
\usepackage{pgfplotstable}
\begin{document}
\begin{tikzpicture}
\begin{groupplot}[group style={group size={2 by 2}}, height={4cm}, width={4cm}]
\nextgroupplot[title={1}]
\addplot+
coordinates {
(0,0)
(1,1)
(2,2)
}
;
\nextgroupplot[hide axis]
\nextgroupplot[title={3}]
\addplot+
coordinates {
(0,2)
(1,1)
(2,1)
}
;
\nextgroupplot[title={4}]
\addplot+
coordinates {
(0,2)
(1,1)
(1,0)
}
;
\end{groupplot}
\node [below right, xshift=-5mm] at (group c2r1.north west) {
\pgfplotstabletypeset[
col sep=&, % specify the column separation character
row sep=\\, % specify the row separation character
columns/E/.style={string type} % specify the type of data in the designated column
]{
A & B & C & D & E \\
1 & 10 & 0.1 & 1000 & 2011-01-01 \\
2 & 20 & 0.2 & 2000 & 2012-02-02 \\
3 & 30 & 0.3 & 3000 & 2013-03-03 \\
4 & 40 & 0.4 & 4000 & 2014-04-04 \\
5 & 50 & 0.5 & 5000 & 2015-05-05 \\
}};
\end{tikzpicture}
\end{document}
答案2
有时一组地块旁边的一张桌子与这些地块有关。
在这个版本中,图和桌子一样大。
通过循环放置图表和表格(其中表格设置为数字 0)
\pgfplotsforeachungrouped \n in {1,0,2,3}{%%
\ifnum\n=0 \nextgroupplot[title=The Table,hide axis]
\addplot[draw=none]{x}; % so no warnings
\else
\edef\tmp{
\noexpand\nextgroupplot[title=Title\n, ylabel=y\n, xlabel=x]
\noexpand\addplot+[black, mark options={color\n}, thick] table[x=X, y=Y\n]{\noexpand\data};
}\tmp
\fi}%%
其优点在于,您可以控制表格(图)出现的位置:您可以选择{1,0,2,3}
或{1,2,3,0}
或...
和\def\ShowHelps{0}% 1 "yes" 0 "no"
\documentclass[a4paper]{article}
\usepackage[margin=2cm, showframe=false]{geometry}
\usepackage{calc}
\usepackage{colortbl}
\usepackage{pgfplotstable}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepgfplotslibrary{groupplots}
\def\ShowHelps{1}% 1 "yes" 0 "no"
\pgfplotstableread[]{
X Y1 Y2 Y3 Date
1 10 0.1 100 2011-01-01
2 20 0.2 200 2012-02-02
3 30 0.3 300 2013-03-03
4 40 0.4 400 2014-04-04
5 50 0.5 500 2015-05-05
}\data
\foreach \n/\mycolor in {1/red, 2/blue!66, 3/purple}{
\xglobal\colorlet{color\n}{\mycolor} }
\pgfplotsinvokeforeach{1,...,3}{
\pgfplotstableset{every col no #1/.style={
column type/.add={>{\columncolor{color#1}}}{} }, }
}
\newsavebox{\mytable}
\sbox{\mytable}{%
\pgfplotstabletypeset[
columns/Date/.style={string type}
]{\data}}
\pgfmathsetlengthmacro\tablewidth{width("\usebox{\mytable}")}
%\pgfmathsetlengthmacro\tableheight{height("\usebox{\mytable}")}% not good
\newlength{\tabheight}
\settototalheight{\tabheight}{\usebox{\mytable}} % good
\pgfmathsetlengthmacro\tableheight{\the\tabheight}
\ifnum\ShowHelps=1
\tikzset{Help/.style={draw=#1,
nodes={scale=0.6, fill=yellow, draw=#1, text=black, font=\tiny, midway, above, align=left,} },
Help/.default=red,
}\else
\tikzset{Help/.style={opacity=0, overlay},
}\fi
\begin{document}
\begin{tikzpicture}[]
\begin{groupplot}[group style={
group size={2 by 2},
horizontal sep=44pt, vertical sep=45pt,
},
scale only axis, % 1/2
width=\tablewidth, height=\tableheight, % 2/2
]
\pgfplotsforeachungrouped \n in {1,0,2,3}{%%
\ifnum\n=0 \nextgroupplot[title=The Table,hide axis]
\addplot[draw=none]{x}; % so no warnings
\else
\edef\tmp{
\noexpand\nextgroupplot[title=Title\n, ylabel=y\n, xlabel=x]
\noexpand\addplot+[black, mark options={color\n}, thick] table[x=X, y=Y\n]{\noexpand\data};
}\tmp
\fi}%%
% Help 1/2
\xdef\verticalsep{\pgfkeysvalueof{/pgfplots/group/vertical sep}}
\xdef\horizontalsep{\pgfkeysvalueof{/pgfplots/group/horizontal sep}}
\end{groupplot}
% Help 2/2
\node[draw=gray, anchor=north west, inner sep=0pt] (X) at (group c2r1.north west) {\usebox{\mytable}};
\draw[Help, -|] (X.north west) -- +(\tablewidth,0) node[Help, near start]{\tablewidth \\ tablewidth};
\draw[Help, -|] (X.north west) -- +(0,-\tableheight) node[Help, rotate=90]{\tableheight \\ tableheight};
\draw[Help,-|] (group c2r1.south west) -- +(0,-\verticalsep) node[Help, rotate=90]{\verticalsep \\ vertical sep};
\draw[Help,-|] (group c2r1.south west) -- +(-\horizontalsep,0) node[Help]{\horizontalsep \\ horizontal sep};
\draw[Help,dashed] (group c2r1.north west) -- +(-\tablewidth-\horizontalsep,0);
\draw[Help,dashed] (group c2r1.south west) -- +(-\tablewidth-\horizontalsep,0);
\draw[Help,dashed] (group c2r2.south west) -- +(0,\tableheight) ;
\draw[Help,dashed] (group c2r2.south east) -- +(0,2*\tableheight+\verticalsep) ;
\end{tikzpicture}
\end{document}