如何在同一张 tikzpicture 中绘制两条曲线,每条曲线有两列信息

如何在同一张 tikzpicture 中绘制两条曲线,每条曲线有两列信息

我的目标是建立一个具有两条曲线的 tikzpicture,第一条曲线具有以下 X 和 Y 值,第二条曲线具有以下 X 和 Y 值,X 轴和 Y 轴的所有值范围从 0 到 1。现在我发现这个例子是一个起点,但不确定如何修改它,因为它假设两条曲线的 X 值相同,只有 Y 轴不同。有没有办法实现我的需求?

    \documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage{pgfplots}
\pgfplotsset{width=10cm,compat=1.14}
%enter the data sets as follows.

\begin{filecontents}{thu3.dat}
X Splits    Part1  Part2
1 Split-1     24    36
2 Split-2       24  34
3 Split-3       22  29
4 Split-4       25  31
5 Split-5   1   1
\end{filecontents}

\begin{document}

\begin{figure}[h!]


\begin{tikzpicture}
\begin{axis}[
axis lines=middle,
ymin=0,
x label style={at={(current axis.right of origin)},anchor=north, below=10mm},
title={\textbf{\textit{Accuracy}}},
    xlabel=Time,
  ylabel=No. of Channels,
  xticklabel style = {rotate=30,anchor=east},
   enlargelimits = false,
  xticklabels from table={thu3.dat}{Splits},xtick=data]
\addplot[orange,thick,mark=square*] table [y=Part1,x=X]{thu3.dat};
\addlegendentry{Part I}
\addplot[green,thick,mark=square*] table [y= Part2,x=X]{thu3.dat};
\addlegendentry{Part II}
\end{axis}
\end{tikzpicture}
\caption{Comparison between part 1 and part 2 on Thursday}
\end{figure}
\end{document}

谢谢

答案1

有几件事需要改变:

axis选项中您要删除以下三项:

xticklabel style = {rotate=30,anchor=east},
xticklabels from table={thu3.dat}{Splits},
xtick=data

我认为第一个在这里毫无意义,因为您只有数字。刻度标签不太长,不需要旋转。我想您不想从某个文件中读取刻度标签,我猜您只想要数值。最后一个将在第一个中的每个数据点上放置一个刻度\addplot,这太多了。

对于\addplots 本身,你想要

\addplot[orange,thick,mark=square*] table[col sep=comma] {Curve_one.csv};
\addplot[green,thick,mark=square*] table[col sep=comma] {Curve_two.csv};

可能还有其他颜色/标记,但这取决于您。颜色由orange/设定green,因此要使用其他颜色,只需将其替换为您需要的任何颜色即可。要获得更细的线条,您只需删除 即可thick。(或替换为thin,但我相信这是默认设置。)如果您想更改标记(方块)的大小,请使用,您可以根据需要mark size=1pt修改其中的内容。1pt

这里我使用了您发布链接的两个数据文件。pgfplots默认情况下,假设数据文件中的列由空格分隔,因此col sep=comma这里需要。我没有明确指定哪列是 x 哪列是 y,因为pgfplots除非另有说明,否则将使用第一列作为 x 值,第二列作为 y 值。这就是这些.csv文件的结构。

要使标签在轴上居中,最简单的解决方案可能是更改axis lines=middleaxis lines=left。这还会改变另一件事,为您提供 x 轴和 y 轴上的零刻度标签。但是您的代码中已经有了移动轴标签的方法,在原始代码中。因此,另一种方法是:

axis lines=middle,
x label style={at={(0.5,0)},below=2.5ex},
y label style={at={(0,0.5)},rotate=90,above=5ex},

在此处输入图片描述

\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{pgfplots}
\pgfplotsset{width=10cm,compat=1.14}
\definecolor{RYB1}{RGB}{218,232,252}
\definecolor{RYB3}{RGB}{108,142,191}
\begin{document}

\begin{figure}
\centering
\begin{tikzpicture}
\begin{axis}[
  % either use the following three lines
%  axis lines=middle,
%  x label style={at={(0.5,0)},below=2.5ex},
%  y label style={at={(0,0.5)},rotate=90,above=5ex},
  % or use this one line
  axis lines=left,
  ymin=0,
  title={\textbf{\textit{Accuracy}}},
  xlabel=Time,
  ylabel=No. of Channels,
  enlargelimits = false,
  legend pos=south east
]
\addplot[RYB1, mark=square*] table[col sep=comma] {Curve_one.csv};
\addlegendentry{Part I}
\addplot[RYB3, mark=square*] table[col sep=comma] {Curve_two.csv};
\addlegendentry{Part II}
\end{axis}
\end{tikzpicture}
\caption{Comparison between part 1 and part 2 on Thursday}
\end{figure}
\end{document}

相关内容