我已经在 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}