我的目标是建立一个具有两条曲线的 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
,这太多了。
对于\addplot
s 本身,你想要
\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=middle
为axis 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}