draw a plot with point

I try to draw something like this:

To do that, I have written some code using TikZ, unfortunately I don't get what I want.

\documentclass{report}
\usepackage{tikz}
\usetikzlibrary{automata,topaths}
\begin{document}
\begin{tikzpicture}[x=1cm,y=0.4cm]
\draw[<->] (-4,0)--(4,0); % l'axe des abscisses
\draw[<->] (0,-5)--(0,5); % l'axe des ordonnées
\draw[-] (-3,-2)--(3,4); % l'axe des abscisses

\draw (-2,1.5) node[anchor=south] {.};
\draw (-1,1) node[anchor=south] {.};
\draw (-2,3) node[anchor=south] {.};
\draw (-1,2.5) node[anchor=south] {.};
\draw (1,3) node[anchor=south] {.};
\end{tikzpicture}
\end{document}


The result is:

• You can use \draw (0,0) circle[radius=2pt]; and \fill (0,0) circle[radius=2pt];. – Paul Gaborit Jun 26 '12 at 21:30

I would recomend you start using pgfplots to draw graphs. But, if you really want to use a TikZ \node to place the coordinates you can use a \foreach loop to simplify things:

\foreach \Point in {(-2,1.5), (-1,1), (-2,3), (-1,2.5), (1,3)}{
\node at \Point {\textbullet};
}


Note:

• The red and blue nodes are to show that the points are being properly placed at the coordinates.

Code:

\documentclass{report}

\usepackage{tikz}
%\usetikzlibrary{automata,topaths}% note neded for this.

\begin{document}

\begin{tikzpicture}[x=1cm,y=0.4cm]

\draw[latex-latex, thin, draw=gray] (-4,0)--(4,0) node [right] {$x$}; % l'axe des abscisses
\draw[latex-latex, thin, draw=gray] (0,-5)--(0,5) node [above] {$y$}; % l'axe des ordonnées
\draw[thick] (-3,-2)--(3,4); % l'axe des abscisses

\foreach \Point in {(-2,1.5), (-1,1), (-2,3), (-1,2.5), (1,3)}{
\node at \Point {\textbullet};
}

\foreach \Point in {(2,-1.5), (1,-1), (2,-3), (1,-2.5), (1,-3)}{
\node at \Point {$\circ$};
}

% to ensure that the points are being properly centered:
\draw [dotted, gray] (-4,-6) grid (5,5);
\node [red] at (3,2.5) {\textbullet};
\node [blue] at (3,-2.5) {$\circ$};

\end{tikzpicture}
\end{document}

• IMHO, this is a bad solution: \textbullet and $\circ$ are not perfectly centering on coordinates! – Paul Gaborit Jun 26 '12 at 22:01
• @PolGab: Have updated solution to show points are properly placed. – Peter Grill Jun 26 '12 at 22:15
• Are you really sure? Have you used a magnifying glass? Compare your red bullet with \fill (3,2.5) circle(2pt);... – Paul Gaborit Jun 26 '12 at 22:21
• @PolGab: Hmmm... Good point. I will look into why this is the case. Thanks for pointing this out. – Peter Grill Jun 26 '12 at 23:08
• Look at my answer... – Paul Gaborit Jun 27 '14 at 15:11

Just to show how this could be done with pgfplots:

\documentclass{article}
\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
\begin{axis}[
axis lines=middle,
xmin=-10, xmax=10,
ymin=-10, ymax=10,
xtick=\empty, ytick=\empty
]
-10 -4
-8  2
-5  5
-4  7
-3  3
0   6
};
\addplot [only marks, mark=o] table {
-4  -5
-2  -1
-1  -4
2   -3
4   3
6   -1
};
\end{axis}
\end{tikzpicture}
\end{document}


A simple solution using my first comment:

\documentclass[tikz]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[x=1cm,y=0.4cm]
\draw[-stealth] (-3,0)--(4,0) node[right]{x}; % x axis
\draw[-stealth] (0,-3)--(0,5) node[above]{y}; % y axis
\draw[dashed] (-3,-2)--(3,4) node[above]{H}; % a line...

\end{tikzpicture}
\end{document}


• You could combine all the filled/unfilled circles into a single \fill/\draw command (\fill [radius=2pt] (-1,1) circle [] (-1,2.5) circle;), which saves some typing and makes it easier to adjust the colour and radius for all circles simultaneously. – Jake Jun 27 '12 at 5:37
• @Jake: You are right: there are plenty of ways to reduce the size of this code. But it is perhaps too much at once for a beginner. – Paul Gaborit Jun 27 '12 at 6:19

If you want to draw several points with labels using TikZ the easiest way to do this is

\foreach \Point/\PointLabel in {(1,1)/A, (3,1)/B, (1,4)/P_1, (3,4)/P_1}
\draw[fill=black] \Point circle (0.05) node[above right] {$\PointLabel$};


Example

Code

\documentclass[tikz]{standalone}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}

% help lines
\draw[step=1,help lines,black!20] (-0.95,-0.95) grid (4.95,4.95);
% axis
\draw[thick,->] (-1,0) -- (5,0);
\draw[thick,->] (0,-1) -- (0,5);

% points
\foreach \Point/\PointLabel in {(1,1)/A, (3,1)/B, (1,4)/P_1, (3,4)/P_1}
\draw[fill=black] \Point circle (0.05) node[above right] {$\PointLabel$};

\end{tikzpicture}

\end{document}