我有一个如下所示的文件:
1 0.237340 0.135170 0.339511 0.237653 0.135482 0.339823
2 0.561320 0.422007 0.700633 0.165871 0.026558 0.305184
3 0.694760 0.534205 0.855314 0.074856 -0.085698 0.235411
4 0.728306 0.560179 0.896432 0.003361 -0.164765 0.171487
5 0.711710 0.544944 0.878477 -0.044582 -0.211349 0.122184
6 0.671241 0.511191 0.831291 -0.073347 -0.233397 0.086703
7 0.621177 0.471219 0.771135 -0.088418 -0.238376 0.061540
8 0.569354 0.431826 0.706882 -0.094382 -0.231910 0.043146
9 0.519973 0.396571 0.643376 -0.094619 -0.218022 0.028783
10 0.475121 0.366990 0.583251 -0.091467 -0.199598 0.016664
大多数时候,我需要绘制两列相互对应的图表。这样很好。但有时我需要按行绘制箱线图。为此,我的想法是转置表格,然后选择我想要作为列的行。问题是第一行包含索引,需要将其删除。这个答案展示了如何省略散点图和直方图的若干行,但建议的箱线图解决方法有点不合适。我想知道是否有更简单的解决方案,特别是因为我只需要省略第一行并知道它的值。
这是我现在所拥有的,但由于没有省略索引,因此箱线图中有一个很大的异常值(10)。
\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{tikz}
\usepgfplotslibrary{statistics}
\usepackage{pgfplotstable}
\begin{document}
\pgfplotstableread{
1 0.237340 0.135170 0.339511 0.237653 0.135482 0.339823
2 0.561320 0.422007 0.700633 0.165871 0.026558 0.305184
3 0.694760 0.534205 0.855314 0.074856 -0.085698 0.235411
4 0.728306 0.560179 0.896432 0.003361 -0.164765 0.171487
5 0.711710 0.544944 0.878477 -0.044582 -0.211349 0.122184
6 0.671241 0.511191 0.831291 -0.073347 -0.233397 0.086703
7 0.621177 0.471219 0.771135 -0.088418 -0.238376 0.061540
8 0.569354 0.431826 0.706882 -0.094382 -0.231910 0.043146
9 0.519973 0.396571 0.643376 -0.094619 -0.218022 0.028783
10 0.475121 0.366990 0.583251 -0.091467 -0.199598 0.016664
}{\table}
\pgfplotstabletranspose[string type]\tableT{\table}
\pgfplotstablegetcolsof{\tableT}
\pgfmathsetmacro\numberofCols{\pgfplotsretval-1}
\begin{tikzpicture}
\begin{axis}[]
\addplot+[boxplot] table [y index=\numberofCols]{\tableT};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
对于这种情况,您可以告诉pgfplotstable
将第一列用作转置表的标题行,其中colnames from={0}
。由于您的表格没有标题行,第一行中没有文本条目,因此列索引用作列名。pgfplotstable
从零开始计数,0
第一列也是如此。
顺便注意一下,因为会pgfplotstableread{..}\table
破坏table
环境,所以在使用表名时要小心。\begin{table}
\table
\documentclass{article}
\usepackage{pgfplotstable} % loads pgfplots which loads tikz
\usepgfplotslibrary{statistics}
\begin{document}
% be careful what you name these, with \table you break the table-environment,
% because \begin{table} does \table "behind the scenes"
\pgfplotstableread{
1 0.237340 0.135170 0.339511 0.237653 0.135482 0.339823
2 0.561320 0.422007 0.700633 0.165871 0.026558 0.305184
3 0.694760 0.534205 0.855314 0.074856 -0.085698 0.235411
4 0.728306 0.560179 0.896432 0.003361 -0.164765 0.171487
5 0.711710 0.544944 0.878477 -0.044582 -0.211349 0.122184
6 0.671241 0.511191 0.831291 -0.073347 -0.233397 0.086703
7 0.621177 0.471219 0.771135 -0.088418 -0.238376 0.061540
8 0.569354 0.431826 0.706882 -0.094382 -0.231910 0.043146
9 0.519973 0.396571 0.643376 -0.094619 -0.218022 0.028783
10 0.475121 0.366990 0.583251 -0.091467 -0.199598 0.016664
}{\datatable}
% the colnames from-key lets you define a column from the old table
% to use as column names in the transposed one
\pgfplotstabletranspose[string type,colnames from={0}]\tableT{\datatable}
\pgfplotstablegetcolsof{\tableT}
\pgfmathsetmacro\numberofCols{\pgfplotsretval-1}
\pgfplotstabletypeset\tableT
\begin{tikzpicture}
\begin{axis}[]
\addplot+[boxplot] table [y index=\numberofCols]{\tableT};
\end{axis}
\end{tikzpicture}
\end{document}