Tikzpicture-figure:对绘图数据进行排序(升序/降序)?

Tikzpicture-figure:对绘图数据进行排序(升序/降序)?

我正在使用 tikzpicture 进行绘图。我想要绘制的值是典型的 (X,Y) 对。x 值是一个无趣的 id 值。我想根据 y 值按升序/降序排列容器,但我该怎么做呢?该图似乎会自动采用 x 值进行排序,我该如何覆盖它?(我并不是特别喜欢 tikzpicture - 它只是第一个真正起作用并显示绘图的东西......)按照最简示例,我如何根据 y 值实现重新排序?

\documentclass{article}
\usepackage[english]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{relsize}
\usepackage{times}
\usepackage{url}
\usepackage{latexsym}
\usepackage{graphicx}
\usepackage{colortbl}
\usepackage{color}
\usepackage{caption}
\usepackage{pgfplots, pgfplotstable}
\usetikzlibrary{arrows}
\usepackage{amsmath}
\usepackage{multirow}
\usepackage{booktabs}

\usepackage{filecontents}
\definecolor{OgAns}{rgb}{0, 0.8, 0.4} 
\begin{filecontents}{testdata.dat}
1   30
2   44
4   26
3   39
\end{filecontents}

\begin{document}
\begin{figure}
\begin{tikzpicture}
        \begin{axis}[   
            ybar stacked,
            ymin=0,
            ymax=100,
            bar width=5pt,
            legend style={at={(0.35, -0.4)},anchor=south west},
            legend columns=-1            
          ]
          \addplot[ybar,fill=OgAns]  file {testdata.dat}; 
        \end{axis}
    \end{tikzpicture}
\end{figure}


\end{document}

答案1

您可以使用包对表格进行排序pgfplotstable。它提供了一个命令\pgfplotstablesort[<options>]{<output table name>}{<input table>}。要读取testdata.dat文件并根据第二列按降序排序,将排序后的表格存储在名为的宏中\datatablesorted,您可以使用以下命令:

\pgfplotstablesort[sort key=1, sort cmp=int >]{\datatablesorted}{testdata.dat}

要绘制排序表,您可以使用以下命令:

\addplot [fill=green]  table [x expr=\coordindex] {\datatablesorted};

必须x expr=\coordindex确保条形图按照它们在排序表中出现的顺序绘制,否则它们将根据第一列中的值绘制。

为了获得条形的正确标签,请xticklabels from table={\datatablesorted}{0}axis选项中包含指示 PGFPlots 从表格的第一列中获取标签\datatablesorted

\documentclass{article}
\usepackage{pgfplots, pgfplotstable}

\usepackage{filecontents}
\begin{filecontents}{testdata.dat}
1   30
2   44
4   26
3   39
\end{filecontents}

\pgfplotstablesort[sort key=1, sort cmp=int >]{\datatablesorted}{testdata.dat}

\begin{document}
\begin{tikzpicture}
        \begin{axis}[   
            ybar,
            ymin=0,
            ymax=100,
            xtick=data,
            xticklabels from table={\datatablesorted}{0}
          ]
          \addplot [fill=green]  table [x expr=\coordindex] {\datatablesorted}; 
        \end{axis}
    \end{tikzpicture}
\end{document}

相关内容