[Tex/LaTex] Draw a filled circle at every point of a TikZ plot

tikz-pgftikz-styles

Consider the following simple example:

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}

  \coordinate (a) at (0,0);
  \coordinate (b) at (1,1);
  \coordinate (c) at (2,0);

  \draw (a) -- (b) -- (c);

  \fill (a) circle (2pt);
  \fill (b) circle (2pt);
  \fill (c) circle (2pt);

\end{tikzpicture}
\end{document}

I am interested in improving this code. In particular I would like to avoid the manual drawing of the circles. Have in mind a case where many vertices are involved with many different names.

I know I could replace the fill's with some loop like

  \foreach \i in {a,b,c}
  \fill (\i) circle (2pt);

But I'm interested in more global magic, that is a way to fill a circle (or any other shape) of some fixed radius radius (or dimension) whenever TikZ meets a coordinate.

A bonus would be a solution which can be switched off for certain vertices. I believe the solution is to use style's but I don't know how to do it.

Best Answer

With a plot you can use marks. This allows to use the marks *, x, + and ball. More plot marks can be loaded with the plotmarks library.

Available options are

  • mark,
  • mark repeat,
  • mark phase,
  • mark indices,
  • mark size,
  • the style every mark,
  • mark options (which simply sets every mark) and
  • no marks and no markers (which are the same as mark=none).

and with the plotmarks library

  • mark color (for the other color of the starred half versions),
  • text mark (text used for the text mark),
  • text mark as node and
  • text mark style

Code

\documentclass[tikz]{standalone}
\usetikzlibrary{plotmarks}
\begin{document}
\begin{tikzpicture}[anchor=mid west,
  mark size=+2pt, mark color=blue, text mark=Ti\emph{k}Z, ball color=green]
  \foreach \plm[count=\cnt] in {*, x, +, ball, % always loaded, ball only with TikZ
      -, |, o, asterisk, star, 10-pointed star,
      oplus, oplus*, otimes, otimes*, triangle, triangle*, diamond, diamond*,
      halfdiamond*, halfsquare*, halfsquare right*, halfsquare left*,
      pentagon, pentagon*, Mercedes star, Mercedes star flipped, halfcircle, halfcircle*,
      heart, text}
    \draw[mark options={fill=red}, shift=(down:\cnt/2.5)]
      plot[mark=\plm] coordinates {(0,0) (1,.5) (2,0)} node {\quad\ttfamily\plm};
\end{tikzpicture}
\end{document}

Output

enter image description here