我目前正在使用该pgfplots
包从文件渲染表格.csv
。文件是自动生成的。
我经常使用如下表格:
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\makeatletter
\pgfplotstableset{
discardrow if not/.style 2 args={
row predicate/.code={
\def\pgfplotstable@loc@TMPd{\pgfplotstablegetelem{##1}{#1}\of}
\expandafter\pgfplotstable@loc@TMPd\pgfplotstablename
\edef\tempa{\pgfplotsretval}
\edef\tempb{#2}
\ifx\tempa\tempb
\else
\pgfplotstableuserowfalse
\fi
}
}
}
\makeatother
\usepackage{filecontents}
\begin{filecontents}{data.txt}
Category Value Score
A 2 1.1
A 10 2.2
A 20 1.1
A 30 4.2
A 40 4.6
B 2 1.2
B 10 1.1
B 20 1.1
B 30 1.2
B 40 1.1
\end{filecontents}
\pgfplotstableread{data.txt}\loadedtable
\begin{document}
\pgfplotstabletypeset[columns={Value, Score},
columns/Category/.style={string type},
discardrow if not={Category}{A}]\loadedtable
\pgfplotstabletypeset[columns={Value, Score},
columns/Category/.style={string type},
discardrow if not={Category}{B}]\loadedtable
\end{document}
现在我想合并这两个表的“类别”行并引入虚拟列,即生成的表应该只包含:
Value Score A Score B
2 1.1 1.2
10 2.2 1.2
20 1.1 1.1
30 4.2 1.2
40 4.6 1.1
我们可以用 来做那件事pgfplots
吗?
谢谢您的任何建议!
答案1
为了避免出现虚假空格,请记住在 的定义内%
标有 的行末尾添加符号。<----
\pgfplotstableset
\begin{filecontents}[overwrite]{data.txt}
Category Value Score
A 2 1.1
A 10 2.2
A 20 1.1
A 30 4.2
A 40 4.6
B 2 1.2
B 10 1.1
B 20 1.1
B 30 1.2
B 40 1.1
\end{filecontents}
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\makeatletter
\pgfplotstableset{
discardrow if not/.style 2 args={
row predicate/.code={% <-----
\def\pgfplotstable@loc@TMPd{\pgfplotstablegetelem{##1}{#1}\of}% <-----
\expandafter\pgfplotstable@loc@TMPd\pgfplotstablename% <-----
\edef\tempa{\pgfplotsretval}% <-----
\edef\tempb{#2}% <-----
\ifx\tempa\tempb
\else
\pgfplotstableuserowfalse
\fi
}
}
}
\makeatother
\pgfplotstableread{data.txt}\loadedtable
\begin{document}
\pgfplotstabletypeset[columns={Value, Score},
columns/Score/.style={column name=Score A},
discardrow if not={Category}{A}
]\loadedtable
% <- Add this or remove the line
\pgfplotstabletypeset[columns={Score},
columns/Score/.style={column name=Score B},
discardrow if not={Category}{B}
]\loadedtable
\end{document}
或者,这会产生相同的结果,但不使用 usgin \pgfplotstableset
:
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\pgfplotstableread{data.txt}\loadedtable
\begin{document}
\pgfplotstabletypeset[columns={Value, Score},
columns/Score/.style={column name=Score A},
skip rows between index={5}{10},
]\loadedtable
% <- Add this or remove the line
\pgfplotstabletypeset[columns={Score},
columns/Score/.style={column name=Score B},
skip rows between index={0}{5},
]\loadedtable
\end{document}