\foreach
我打算用一个在图表中绘制点并在侧面标记的单一工具制作 TikZ 图表。我\foreach
把所有标签都画在了彼此的顶部。有没有简单的方法可以解决这个问题?
PGFplots 是否是完成这项任务的更好选择?
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\draw[<->] (3,0) -- (0,0) -- (0,3);
\foreach \x/\y/\col/\char in {
1/1/black/A,
2/2/red/B
}
{
\fill[color=\col] (\x,\y) circle [radius=0.1];
\node[align=left] at (3,3) {
\tikz\fill[color=\col] (0,0) circle [radius=0.1]; \char \\
};
}
\end{tikzpicture}
\end{document}
我想要一个“侧面板”来解释每种颜色的含义,但我没有找到干净的输入。
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\draw[<->] (3,0) -- (0,0) -- (0,3);
\foreach \x/\y/\col in {
1/1/black/A,
2/2/red/B
}
{
\fill[color=\col] (\x,\y) circle [radius= 0.1];
}
\node[align=left] at (3,3) {
\tikz\fill[color=black] (0,0) circle [radius=0.1]; A \\
\tikz\fill[color=red] (0,0) circle [radius=0.1]; B \\
};
\end{tikzpicture}
\end{document}
答案1
问题在于您在 处绘制了所有节点(3,3)
,因此它们都绘制在彼此的顶部(您也可以通过圆圈(3,3)
本身看到这种情况)。
pgfplots 解决方案
有点过头了,但是因为常规TikZ
解决方案已经涵盖,所以我还是会添加它。
pgfplots
在绘制散点图时,可以利用每个数据点的元信息。我们利用这些元信息将每个数据点分配到一个类,每个类都有自己的样式。
\documentclass[margin=5mm,tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xmin=0.5,
xmax=2.5,
legend pos=outer north east,
]
\addplot[
only marks,
scatter,
point meta=explicit symbolic,
scatter/classes={
A={mark=triangle*,blue},%
B={mark=square*,red}},
]
table[x=x,y=y,meta=char] {%
x y char
1 1 A
2 2 B
};
\legend{A,B};
\end{axis}
\end{tikzpicture}
\end{document}
请参阅pgfplots
第 254f 页的手册以了解图例定位,第 181 页及后续页面了解不同的mark
样式,第 112 页及后续页面了解有关 的一些信息scatter/classes
。
旧解决方案
编辑:我最初误解了这个问题,但将其留在这里以供后人参考。
这是您想要的结果(或类似的结果)吗?
\documentclass[margin=5mm,tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\draw[<->] (3,0) -- (0,0) -- (0,3);
\foreach \x/\y/\col/\char in {
1/1/black/A,
2/2/red/B,
3/3/red/C
}
{
\fill[color=\col] (\x,\y) circle [radius=0.1];
\node[xshift=1em] at (\x,\y) {\char};
}
\end{tikzpicture}
\end{document}
我希望我理解了你的意图。如果没有,请告诉我。pgfplots
是的,你可以使用它,但这不是绝对必要的。
答案2
对于这种简单的情况,实际上不需要 PGFplots。
\documentclass[tikz,border=5pt]{standalone}
\begin{document}
\begin{tikzpicture}
\draw[<->] (3,0) -- (0,0) -- (0,3);
\foreach \x/\y/\col/\char in {1/1/black/A, 2/2/red/B} {
\fill[color=\col] (\x,\y) circle [radius=2pt];
\fill[color=\col,yshift=-\x em] (3,3)node[right]{\footnotesize\char} circle [radius=2pt];
}
\end{tikzpicture}
\end{document}