pgfplotstable 中缺少网格线,标签打印重复

pgfplotstable 中缺少网格线,标签打印重复

在以下文档中,我对两个图表使用了相同的设置。但是,带有水平网格线的标签“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}

在此处输入图片描述

相关内容