跳过或更改一条网格线

跳过或更改一条网格线

我正在尝试在条形图中绘制标准化数据。为了更好地显示数据已标准化,我希望水平网格线看起来1有所不同,例如虚线而不是点线。

我想这可以通过(1)改变单个网格线的样式(我不知道该怎么做)或者通过(2)手动添加线1(我设法做到了)并跳过网格线,这样线条就不会相互覆盖(我再次不知道如何做到这一点)。

这是我对第二个案例的 MWE:

\documentclass{article}

\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{pgfplotstable}

\usetikzlibrary{backgrounds}

\pgfplotsset{compat=1.8}

\begin{document}

\begin{tikzpicture}

\pgfplotstableread{
Model       runtime normalized
(1)     0.17    0.11
(2)     1.60    1.00
(3)     3.17    1.98
(4)     1.72    1.08
(5)     4.01    2.51
}\data

\begin{axis}[
    ybar,
    ymin=0,
    xtick=data,
    xticklabels from table={\data}{Model},
    grid style={dotted,gray},
    ymajorgrids=true,
    nodes near coords,
]

\addplot [draw=black,fill=gray!15] table [y=normalized,x expr=\coordindex] {\data};
\begin{scope}[on background layer]
\draw [dashed] ({rel axis cs:0,0}|-{axis cs:0,1}) -- ({rel axis cs:1,0}|-{axis cs:0,1});
\end{scope}

\end{axis}
\end{tikzpicture}

\end{document}

结果如下:

在此处输入图片描述

这里,值的网格线1仍然绘制,并且它的点出现在我手动添加的线的虚线之间,这对我来说看起来很丑陋。

答案1

一种方法是指定yticks除 1 之外的所有内容,然后使用extra y ticksextra y ticks style在 y=1 处添加刻度并仅为该刻度更改网格样式。

\documentclass{article}

\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{pgfplotstable}

\usetikzlibrary{backgrounds}

%\pgfplotsset{compat=1.8}

\begin{document}

\begin{tikzpicture}

\pgfplotstableread{
Model       runtime normalized
(1)     0.17    0.11
(2)     1.60    1.00
(3)     3.17    1.98
(4)     1.72    1.08
(5)     4.01    2.51
}\data

\begin{axis}[
    ybar,
    ymin=0,
    xtick=data,
   ytick={0.5,1.5,2.0,2.5},
    extra y ticks=1,
    extra y tick style={grid=major, grid style={dashed,black}},
    xticklabels from table={\data}{Model},
    grid style={dotted,gray},
    ymajorgrids=true,
    nodes near coords,
]

\addplot [draw=black,fill=gray!15] table [y=normalized,x expr=\coordindex] {\data};

\end{axis}
\end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容