在以下文档中,我对两个图表使用了相同的设置。但是,带有水平网格线的标签“10^1”仅在第一个图表中显示。显然,这是由于使用了 data1.dat 而不是 data2.dat 造成的。
我如何确保缺失的网格线也打印在第二张图中?(y 轴似乎也忽略了“ymin=0”键。)
此外,虽然这里看不出来,但如果没有“额外的 y 刻度”键,打印“y 刻度”,则似乎会打印两次这个“y 刻度”(即标签)。在另一个文档中,这个标签看起来比其他标签更粗。也许我完全做错了?
\documentclass{article}
%
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{pgf,tikz,pgfplotstable}
\usepackage{filecontents}
\begin{filecontents}{data1.dat}
N V
0 17.3
1 84.4
2 234.6
3 535.8
4 1059.8
5 2406.6
6 2997.6
7 4798.4
8 7356.6
9 10721.6
10 15470.4
11 21714.7
\end{filecontents}
\begin{filecontents}{data2.dat}
N V
0 26.3
1 73.4
2 234.3
3 640.9
4 1063.0
5 1888.9
6 3145.6
7 4999.6
8 7671.4
9 11407.5
10 16417.3
11 23390.1
12 32443.8
\end{filecontents}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
ymode=log,
width=.8\linewidth,
xmin=0, xmax=9,
ymax=25000,
ymin=0,
restrict y to domain=-1:25000,
log basis y=10,
extra x ticks={0,1,...,9},
extra y ticks={10,100,1000,10000},
extra tick style={grid=major},
xlabel=XLAB,
ylabel=YLAB]
\addplot[blue,line width=1pt,cycle list] table [x=N, y=V]{data1.dat};
\end{axis}
\end{tikzpicture}
\vspace*{1cm}
\rule{\linewidth}{1cm}
\vspace*{1cm}
\begin{tikzpicture}
\begin{axis}[
ymode=log,
width=.8\linewidth,
xmin=0, xmax=9,
ymax=25000,
ymin=0,
restrict y to domain=-1:25000,
log basis y=10,
extra x ticks={0,1,...,9},
extra y ticks={10,100,1000,10000},
extra tick style={grid=major},
xlabel=XLAB,
ylabel=YLAB]
\addplot[blue,line width=1pt,cycle list] table [x=N, y=V]{data2.dat};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
我强烈建议你看看warning information
你的代码。
警告 1
从你的代码\usepackage{filecontents}
Package filecontents Warning: This package is obsolete. Disabling it and passing control to the filecontents environment defined by the LaTeX kernel.
正如警告所说,latex 内核已经定义了filecontents
环境,请参阅latex2e sec 8.11 filecontents: Write an external file
警告 2
从你的代码\usepackage{pgf,tikz,pgfplotstable}
Package pgfplots Warning: running in backwards compatibility mode (unsuitable tick labels; missing features). Consider writing \pgfplotsset{compat=1.17} into your preamble.
pgfplots
包含两个组件:
- 绘图组件
- pgfplotstable 组件简化了数字格式和数字表的后处理。
我认为您不需要该pgfplotstable
组件。警告还建议您将其添加\pgfplotsset{compat=1.17}
到您的序言中。在文档中,compat
强烈建议始终将写入您的.tex
文件。原因
虽然此密钥给最终用户带来了一些工作量,但它也解决了一个常见需求:即使您安装了新版本的 pgfplots,它也能确保您的 .tex 文件始终产生相同的输出。另一方面,它允许我们作为维护者解决软件缺陷并引入行为变化,假设这些变化仅影响具有良好兼容性级别的文档。
相反\usepackage{pgf,tikz,pgfplotstable}
,你只需要
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
警告 3
ymode=log
以下两个警告是出于同样的原因:和的组合ymin=0
Package pgfplots Warning: Ignoring illegal input argument ymin=0: cannot apply log. on input line 58.
原因很简单:0
传递给log
函数的值无效。
警告4
从你的代码\rule{\linewidth}{1cm}
Overfull \hbox (15.0pt too wide) in paragraph at lines 64--66
您需要\noindent
添加\rule{\linewidth}{1cm}
更正
更改ymin
为一个合适的值例如9
,你就会得到你想要的。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\begin{filecontents}{data1.dat}
N V
0 17.3
1 84.4
2 234.6
3 535.8
4 1059.8
5 2406.6
6 2997.6
7 4798.4
8 7356.6
9 10721.6
10 15470.4
11 21714.7
\end{filecontents}
\begin{filecontents}{data2.dat}
N V
0 26.3
1 73.4
2 234.3
3 640.9
4 1063.0
5 1888.9
6 3145.6
7 4999.6
8 7671.4
9 11407.5
10 16417.3
11 23390.1
12 32443.8
\end{filecontents}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
ymode=log,
width=.8\linewidth,
xmin=0, xmax=9,
ymax=25000,
ymin=9,
restrict y to domain=-1:25000,
log basis y=10,
extra x ticks={0,1,...,9},
extra y ticks={10,100,1000,10000},
extra tick style={grid=major},
xlabel=XLAB,
ylabel=YLAB]
\addplot[blue,line width=1pt,cycle list] table [x=N, y=V]{data1.dat};
\end{axis}
\end{tikzpicture}
\vspace*{1cm}
\noindent\rule{\linewidth}{1cm}
\vspace*{1cm}
\begin{tikzpicture}
\begin{axis}[
ymode=log,
width=.8\linewidth,
xmin=0, xmax=9,
ymax=25000,
ymin=9,
restrict y to domain=-1:25000,
log basis y=10,
extra x ticks={0,1,...,9},
extra y ticks={10,100,1000,10000},
extra tick style={grid=major},
xlabel=XLAB,
ylabel=YLAB]
\addplot[blue,line width=1pt,cycle list] table [x=N, y=V]{data2.dat};
\end{axis}
\end{tikzpicture}
\end{document}