我正在尝试在条形图中绘制标准化数据。为了更好地显示数据已标准化,我希望水平网格线看起来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 ticks
并extra 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}