pgfplots:仅绘制表格的部分内容并按“随机”顺序绘制

pgfplots:仅绘制表格的部分内容并按“随机”顺序绘制

我已经在 stackexchange 上潜伏了很长时间,到目前为止,我已经能够找到解决新手问题的方法,但现在我真的陷入困境了!我的问题可能没有那么复杂,但有点难以解释。

我的数据文件中有一个包含 4 列的表格。第一列保存样本 ID,其余三列保存 3 个不同阶段的 y 数据。到目前为止,我已将样本 13 至 17 绘制为线图,我知道如何做到这一点:

\documentclass[12pt]{article}
\usepackage{amsmath}
\usepackage{a4wide}
\usepackage{amssymb}
%\usepackage{hyperref}
%\usepackage{siunitx} % requires packages "l3packages" and "l3kernel"
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{subfig}
\usepackage{float}
\usepackage{graphicx}       
\usepackage{tikz}
\usepackage{microtype}
\usepackage[bottom = 0.50cm]{geometry}

\usetikzlibrary{matrix,spy,backgrounds}
\usepgfplotslibrary{units}


\begin{document}

\pgfplotstableread{
SampleNo     Phase_1    Phase_2 Phase_3
13   10.72447   120.495518  280.505095
14  20.07597    170.114048  360.86694
15  -40.29807   120.443185  380.23223
16  -10.280941  160.268171  350.588343
17  10.591254   140.887412  310.085956
18  20.18464    190.566417  390.946054
19   10.63166   130.196773  270.610362
20  20.05172    180.115205  370.31739
21  10.71398    140.007552  290.080619
22   20.01196   170.877254  350.66182
23  20.21736    190.038692  380.31596
}\data

\begin{figure}[H]

%\centering
%\hspace{-1cm}
\begin{tikzpicture}[spy using outlines={circle, magnification=4, size=1cm, connect spies}]
\pgfplotsset{
    every axis/.append style={line width=1pt},
    use units = true,
    xlabel = Sample No.,
    ylabel = Deformation,
   xmin=13,
   xmax=17,
    legend style={
       cells={anchor=west},
        legend pos=outer north east,
        %font=\scriptsize,
    },
    cycle list name=exotic,
    legend entries={
        Phase 1,Phase 2,Phase 3
        }
}
\begin{axis}[grid=major,cycle list name=exotic,]
    \addplot+[line join=bevel,line width=1pt,mark=none] table[y=Phase_1]{\data};
    \addplot+[line join=bevel,line width=1pt,mark=none] table[y=Phase_2]{\data};
    \addplot+[line join=bevel,line width=1pt,mark=none] table[y=Phase_3]{\data};
\end{axis}

\end{tikzpicture}
\end{figure}

\end{document} 

制作:

现在说说我的问题:我最好在同一张图中为样本 13、24、23、22 和 21 绘制一条线图(按给定顺序!)它们应该跨越与绘制的第一个样本相同的“x 域”,并且刻度必须表示“13/13”、“14/24”等等。我猜这或多或少可以手动解决...我最大的问题是按照“我的”顺序获取提到的样本,并且中间没有空的样本编号。

提前致谢!我非常乐意回答任何进一步的问题!

答案1

您可以叠加多个轴,但有很多东西需要手动设置。

诀窍在于,使用symbolic x coords可以以最直接的方式排列数据点。使用 和xmin可以xmax(以最直接的方式)过滤掉数据点。

请注意,此技巧仅当您的数据点“不连续”时才有效。对于连续数据,可以考虑家族x coord trafo

\documentclass[border=9,tikz]{standalone}
\usepackage{pgfplotstable}

\begin{document}

\pgfplotstableread{
    SampleNo Phase_1   Phase_2     Phase_3
    13       10.72447  120.495518  280.505095
    14       20.07597  170.114048  360.86694
    15      -40.29807  120.443185  380.23223
    16      -10.280941 160.268171  350.588343
    17       10.591254 140.887412  310.085956
    18       20.18464  190.566417  390.946054
    19       10.63166  130.196773  270.610362
    20       20.05172  180.115205  370.31739
    21       10.71398  140.007552  290.080619
    22       20.01196  170.877254  350.66182
    23       20.21736  190.038692  380.31596
}\data

\pgfplotsset{
    my axis/.style={ymin=-100,ymax=400,axis lines=#1,only marks,enlarge x limits}
}

\begin{tikzpicture}
    \begin{axis}[symbolic x coords={13,14,15,16,17,18,19,20,21,22,23},xmin=13,xmax=17,my axis=none]
        \addplot table[y=Phase_1]{\data};
        \addplot table[y=Phase_2]{\data};
        \addplot table[y=Phase_3]{\data};
    \end{axis}
    \begin{axis}[symbolic x coords={13,20,23,22,21,14,15,16,17,18,19},xmin=13,xmax=21,my axis=none]
        \addplot table[y=Phase_1]{\data};
        \addplot table[y=Phase_2]{\data};
        \addplot table[y=Phase_3]{\data};
    \end{axis}
    \begin{axis}[symbolic x coords={13,20,23,22,21,14,15,16,17,18,19},xmin=13,xmax=21,my axis=box,xticklabels={x,13/13,14/20,15/23,16/22,17/21}]
        \addplot coordinates{};
    \end{axis}
\end{tikzpicture}

\end{document}

相关内容