使用 pgfplots 访问单个表元素?

使用 pgfplots 访问单个表元素?

我想使用 pgfplots 手册中没有的非标准绘图样式来创建绘图。如果我可以利用该函数\pgfplotstableread,然后以某种方式循环遍历表格的行和列,以使用 tikz 图片创建自定义绘图,那就太好了。我一直在查看 pgfplots 和 pgfplotstable 手册,但不知道是否有办法做到这一点!任何帮助都将不胜感激!

答案1

感谢 Jake 的建议(以及对 pgfplotstable 手册的更深入阅读),我找到了命令\pgfplotstablegetelem。这正是我制作图表所需要的。以下是我希望我的图表在以下假数据上呈现的示例

A B C D
0.2 0.3 0.6 0.3
0.3 0.8 0.9 0.4
0.4 0.6 0.7 0.2
0.5 0.7 0.95 0.8
0.1 0.2 0.3 0.4
0.3 0.5 0.4 0.6

我将此表设置为成对的行。偶数行为绘图中范围的下限,奇数行为范围的上限。

\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{ifthen}

\usetikzlibrary{calc}

\begin{document}

\begin{tikzpicture}[scale=10,x=1cm,y=1cm]
\pgfplotstableread[header=true]{table4.dat}{\datawhead}
\pgfplotstableread[header=false]{table4.dat}{\data}
\pgfplotstablegetrowsof{\datawhead} %Determine no. of rows
\pgfmathsetmacro{\rows}{\pgfplotsretval}
\pgfplotstablegetcolsof{\data} % Determine no. of cols
\pgfmathsetmacro{\cols}{\pgfplotsretval}

\draw[->,ultra thick] (0,0)--(1,0); % axes
\draw[->,ultra thick] (0,0)--(0,1);

\pgfmathsetmacro{\r}{\rows-2} % do some math to separate the range plots and categories
\pgfmathsetmacro{\cats}{\rows/2}
\pgfmathsetmacro{\lines}{\cats*\cols}
\pgfmathsetmacro{\seps}{1/ \lines*0.8}
\pgfmathsetmacro{\bufs}{1-\lines*\seps}
\pgfmathsetmacro{\bufs}{\bufs/\cats}
\pgfmathsetmacro{\catlen}{(\seps*\cols+\bufs)/2}

\foreach \j in {0,2,...,\r}{ % category loop
    \foreach \i/\clr in {0/red,1/blue,2/green,3/blue!40!red}{ %subcategory loop
        \pgfmathsetmacro{\jp}{\j+1}
        \pgfmathsetmacro{\x}{\bufs + \j*\catlen+\i*\seps} % x coordinate
        \pgfplotstablegetelem{\j}{[index]\i}\of\datawhead
        \pgfmathsetmacro{\ya}{\pgfplotsretval} % y coord 1
        \pgfplotstablegetelem{\jp}{[index]\i}\of\datawhead
        \pgfmathsetmacro{\yb}{\pgfplotsretval} % y coord 2
        \pgfplotstablegetelem{0}{[index]\i}\of\data
        \draw[lightgray, thin](\x,0)--(\x,1);
        \node[rectangle,fill=\clr,inner sep=1.2pt,minimum width=6pt](bottom) at (\x,\ya){};
        \node[rectangle,fill=\clr,inner sep=1.2pt,minimum width=6pt](top) at (\x,\yb){};
        \draw[\clr,thick](bottom)--(top);
        \draw(\x,-0.01)--(\x,0.01)node[rotate=90,left=4pt]{\pgfplotsretval};

    }
    \pgfmathsetmacro{\jm}{\j/2}
    \node[anchor=west] at (\bufs+\j*\catlen,-0.1){Category \jm};
}

\end{tikzpicture}
\end{document}

输出结果如下。这几乎就是我想要的,虽然代码有点乱,但它允许我更改数据并轻松生成更新的图。不过最后一件事...我似乎无法将类别索引设为整数。

谢谢杰克,也感谢 pgfplotstable 的作者!

最终数字

相关内容