%20%D0%BE%D0%B4%D0%B8%D0%BD%D0%BE%D1%87%D0%BD%D0%BE%D0%B9%20%D0%BE%D1%82%D0%BC%D0%B5%D1%82%D0%BA%D0%B8.png)
Рассмотрим этот MWE:
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\usetikzlibrary{pgfplots.groupplots}
\begin{document}
\begin{tikzpicture}
\begin{groupplot}[
group style={
group name=my plots,
group size=1 by 3,
xlabels at=edge bottom,
xticklabels at=edge bottom,
vertical sep=5pt,
},
height=3cm,
ymin=1,
ymax=3,
]
\nextgroupplot[,
ytick={1,2,3},
% yticklabel style={yshift=1mm}, % apply this only to tick at 1
]
\addplot[color=red,mark=x] coordinates {
(2,1)
(3,2)
(4,3)
};
\nextgroupplot[,
ytick={1,2,3},
% yticklabel style={yshift=-1mm}, % apply this only to tick at 3
]
\addplot[color=red,mark=x] coordinates {
(2,1)
(3,2)
(4,3)
};
\end{groupplot}
\end{tikzpicture}
\end{document}
Выход:
Постановка задачи:
Я хотел бы предотвратить наложение двух галочек "1" и "3", сдвинув эти метки немного по вертикали. Мой подход заключался в адаптации yticklabel style
. К сожалению, я не нашел способа адаптировать только стиль одной галочки.
Многих вполне устроит ручное решение, мне же оно не нужно.автоматическое предотвращение перекрытия меток.
решение1
Может быть, вы можете задать yticklabels
явно и использовать \raisebox
и\smash
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\usetikzlibrary{pgfplots.groupplots}
\begin{document}
\begin{tikzpicture}
\begin{groupplot}[
group style={
group name=my plots,
group size=1 by 3,
xlabels at=edge bottom,
xticklabels at=edge bottom,
vertical sep=5pt,
},
height=3cm,
ymin=1,
ymax=3,
]
\nextgroupplot[,
ytick={1,2,3},
yticklabels={\smash{1},2,\smash{\raisebox{-\height}{3}}},
]
\addplot[color=red,mark=x] coordinates {
(2,1)
(3,2)
(4,3)
};
\nextgroupplot[,
ytick={1,2,3},
yticklabels={\smash{1},2,\smash{\raisebox{-\height}{3}}},
]
\addplot[color=red,mark=x] coordinates {
(2,1)
(3,2)
(4,3)
};
\nextgroupplot[,
ytick={1,2,3},
yticklabels={\smash{1},2,\smash{\raisebox{-\height}{3}}},
]
\addplot[color=red,mark=x] coordinates {
(2,1)
(3,2)
(4,3)
};
\end{groupplot}
\end{tikzpicture}
\end{document}
Или вы можете использовать \yticklabel
:
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\usetikzlibrary{pgfplots.groupplots}
\newcommand\myyticklabel[2]{%
\ifnum\ticknum=#1%
\smash{\axisdefaultticklabel}%
\else%
\ifnum\ticknum=#2%
\smash{\raisebox{-\height}{\axisdefaultticklabel}}%
\else%
\axisdefaultticklabel%
\fi%
\fi%
}
\begin{document}
\begin{tikzpicture}
\begin{groupplot}[
group style={
group name=my plots,
group size=1 by 3,
xlabels at=edge bottom,
xticklabels at=edge bottom,
vertical sep=5pt,
},
height=3cm,
ymin=1,
ymax=3,
]
\nextgroupplot[,
ytick={1,2,3},
yticklabel={\myyticklabel{0}{2}}
]
\addplot[color=red,mark=x] coordinates {
(2,1)
(3,2)
(4,3)
};
\nextgroupplot[,
ytick={1,2,3},
yticklabel={\myyticklabel{0}{2}}
]
\addplot[color=red,mark=x] coordinates {
(2,1)
(3,2)
(4,3)
};
\nextgroupplot[,
ytick={1,2,3},
yticklabel={\myyticklabel{0}{2}}
]
\addplot[color=red,mark=x] coordinates {
(2,1)
(3,2)
(4,3)
};
\end{groupplot}
\end{tikzpicture}
\end{document}
Обратите внимание, что первое число ticknum
равно 0, а третье — 2.
решение2
Я только что нашел ответ благодаря этомуотвечатьДжейк, используя extra y ticks
и extra y tick style
:
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\usetikzlibrary{pgfplots.groupplots}
\begin{document}
\begin{tikzpicture}
\begin{groupplot}[
group style={
group name=my plots,
group size=1 by 3,
xlabels at=edge bottom,
xticklabels at=edge bottom,
vertical sep=5pt,
},
height=3cm,
ymin=1,
ymax=3,
]
\nextgroupplot[,
ytick={2,3},
extra y ticks={1},
extra y tick style={
yticklabel style={yshift=0.5ex}
},
]
\addplot[color=red,mark=x] coordinates {
(2,1)
(3,2)
(4,3)
};
\nextgroupplot[,
ytick={1,2},
extra y ticks={3},
extra y tick style={
yticklabel style={yshift=-0.5ex}
},
]
\addplot[color=red,mark=x] coordinates {
(2,1)
(3,2)
(4,3)
};
\end{groupplot}
\end{tikzpicture}
\end{document}