\documentclass[10pt,a4paper]{article}
%%% taille 10 points et format de papier A4
%%% classe article

%%% Codage en unicode
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc} 

\usepackage{multicol}%%%         écriture en multicolonnes
\usepackage[normalem]{ulem}%%%   pour texte barré \sout{}
\usepackage[french]{babel}%%%    écriture en français
\DecimalMathComma%%%             évite l'espace après la virgule en mode math
\usepackage{multido}%%%          pour faire des boucles
\usepackage{pst-all,pst-eucl,pst-func}%%% PsTricks etc.
\usepackage{graphicx}%%%         pour graphiques et couleurs	
\usepackage{amsmath,amsfonts,amssymb}%%% outils AMS
\usepackage{mathrsfs}%%%         police script \mathscr{}
\usepackage{tabularx}%%%         tableaux
\usepackage{fancybox}%%%         divers boîtes
\usepackage{lscape}%%%           mode paysage
\usepackage[np]{numprint}%%%     pour formater les nombres de plus de 3 chiffres
\usepackage{colortbl}%%%         pour griser des cases dans un tableau
\usepackage{makeidx}%%%          pour créer un index
\makeindex%%%                    indispensable après l'appel du package makeidx
\usepackage{lettrine}%%%         pour créer des lettrines
\usepackage{eurosym}%%%          sigle euro

%\usepackage{bez123}%%%     courbes de Bézier

\usepackage{vmargin}%%%          réglage des marges
\setmarginsrb{3cm}{2cm}{3cm}{2cm}{1cm}{1cm}{1cm}{1cm}
% 1 est la marge gauche
% 2 est la marge en haut
% 3 est la marge droite
% 4 est la marge en bas
% 5 fixe la hauteur de l'entête
% 6 fixe la distance entre l'entête et le texte
% 7 fixe la hauteur du pied de page
% 8 fixe la distance entre le texte et le pied de page

\setlength{\parindent}{0pt}%%% règle l'indentation en début de paragraphe 

%%%  Commandes perso FH

%%% Pour intégrale, somme et produit, etc.
\newcommand{\ds}{\displaystyle}%%% raccourci pour \displaystyle

%%% ensembles de nombres
%%% On réservera le style "double barre" à l'écriture au tableau
\newcommand{\R}{\textbf{R}}
\newcommand{\N}{\textbf{N}}
\newcommand{\Z}{\textbf{Z}}
\newcommand{\C}{\textbf{C}}
\newcommand{\Q}{\textbf{Q}}
\newcommand{\K}{\textbf{K}}

%%% différents repères
\newcommand{\Oij}{(\text{O}\,;\,\vec{\imath}\,,\,\vec{\jmath})}
\newcommand{\rep}{(\text{O},\text{I},\text{J})}
\newcommand{\Ouv}{(\text{O}\,;\,\vec{u}\,,\,\vec{v})}
\newcommand{\Oijk}{(\text{O}\,;\,\vec{\imath}\,,\,\vec{\jmath}\,,\,\vec{k})}

%%%  Courbe représentative
\newcommand{\Cr}[1]{\mathscr{C}_{#1}}

%%% crochets gauche et droit
\newcommand{\cg}{\texttt{]}}
\newcommand{\cd}{\texttt{[}}

%%% crochet d'entiers
\newcommand{\cde}{\texttt{[}\!\!\texttt{[}}
\newcommand{\cge}{\texttt{]}\!\!\texttt{]}}

%%% inférieur ou égal, supérieur ou égal
\newcommand{\pg}{\geqslant}
\newcommand{\pp}{\leqslant}

\usepackage{fancyhdr}%%%       En-têtes et pieds de pages
\pagestyle{fancy}
\renewcommand\headrulewidth{1pt}%%% filet haut de page
\renewcommand\footrulewidth{0pt}%%% filet bas de page
\renewcommand{\headwidth}{\textwidth}
%%% head pour haut de page
%%% L C et R pour Left Center et Right
\fancyhead[L]{\url{http://latexetmath.canalblog.com}}
\fancyhead[R]{\today} %%% \today = date du jour
\fancyhead[C]{}
%%% foot pour pied de page
\fancyfoot[C]{\begin{small}-- \thepage\  --\end{small}}  
\fancyfoot[R]{}%%%     {\jobname}%%% nom du fichier tex
\fancyfoot[L]{\href{mailto:francois.hache@free.fr}{FH}}

%%% Pour les énumérations
%%% premier niveau 
\renewcommand{\theenumi}{\textbf{\arabic{enumi}}}
\renewcommand{\labelenumi}{\textbf{\theenumi.}}
%%% deuxième niveau
\renewcommand{\theenumii}{\textbf{\alph{enumii}}}
\renewcommand{\labelenumii}{\textbf{\theenumii.}}
%%% troisième niveau
\renewcommand{\theenumiii}{\textbf{\arabic{enumiii}}}
\renewcommand{\labelenumiii}{\textbf{\theenumiii)}}
%%% permet d'avoir a. au lieu de (a) dans une énumération de niveau 2
%%% voir : http://cahiers.gutenberg.eu.org/cg-bin/article/CG_1994___17_32_0.pdf

\newenvironment{changemargin}[2]
{\begin{list}{}{%
\setlength{\topsep}{0pt}%
\setlength{\leftmargin}{0pt}%
\setlength{\rightmargin}{0pt}%
\setlength{\listparindent}{\parindent}%
\setlength{\itemindent}{\parindent}%
\setlength{\parsep}{0pt plus 1pt}%
\addtolength{\leftmargin}{#1}%
\addtolength{\rightmargin}{#2}%
}\item }{\end{list}}
%%%% pour changer les marges gauche et droite sur un paragraphe
%%%% \begin{changemargin}{marge gauche}{marge droite}
%%%% ...
%%%% \end{changemargin}

\usepackage{hyperref}%%% pour les références

%%% paramètres des pdf
\hypersetup{
pdfauthor = {F. Hache},
pdftitle = {Intervalle de fluctuation},
pdfstartview = FitH,
pdfcreator = {LaTeX vers PDF}
allbordercolors = white,
colorlinks=true,
linkcolor=red,
urlcolor=red,
unicode=true}

%%% Autres commandes qui doivent être définies après hyperref
\newcommand{\e}{\,\text{e}}%%%               le e de l'exponentielle
\renewcommand{\d}{\,\text d}%%%              le d de l'intégration
\renewcommand{\i}{\,\text{i}\,}%%%           le i des complexes
\renewcommand{\v}[1]{\,\overrightarrow{\,\text{#1}\,}}%%% vecteur

%%% définitions de nouvelles couleurs
\newrgbcolor{rb}{0.804 0 0}
\newrgbcolor{vb}{0 0.545 0}

\begin{document}

\part*{\centering Papier millimétré et autres astuces}

\vspace{1cm}

Depuis le début que j'écris en \LaTeX{}, j'utilise PsTricks pour les graphiques; c'est un outil simple et puissant qui peut être dopé par de nombreuses extensions. J'ai fait quelques infidélités à ce package en utilisant quelquefois le package Euclide (pst-eucl) qui est parfaitement compatible avec PsTricks.

Dans la chronique d'aujourd'hui, je vais vous montrer quelques astuces de PsTricks pour tracer du papier millimétré, déporter une origine ou encore graduer différemment les axes. On reste dans l'objectif de ce blog: s'adresser à des débutants; certains d'entre vous connaissent sans doute tout ça par c\oe ur, qu'ils veuillent bien m'excuser!

\section{Premier exemple}

\subsection{L'énoncé}

Voici un extrait de problème du baccalauréat hôtellerie de juin 2007 donné en Polynésie.

{\vb
\begin{quote}
 \textbf{Partie A}
Le tableau ci-dessous donne l'évolution du chiffre d'affaires de cette centrale de réservation en milliers d'euros entre 2001 et 2005.

\medskip

\begin{tabularx}{\linewidth}{|c|*{5}{>{\centering \arraybackslash}X|}}\hline
Année					&2001&	2002	&2003	&2004	&2005\\ \hline
Rang de l'année $x_{i}$	&1		&	2	&3		&4 		&5\\ \hline
Chiffre d'affaires $y_{i}$&125	&138	&165	&200	&250\\ \hline
\end{tabularx}
\begin{flushright}\emph{Source : l'Observatoire du Comité Départemental du Tourisme du Jura.}
\end{flushright}

\medskip

\begin{enumerate}
\item \ldots
\end{enumerate}

On se propose d'étudier un autre nuage de points.

\begin{enumerate}
\setcounter{enumi}{1}
\item  On pose $z_{i} =  \ln y_{i}$.

Reproduire et compléter le tableau suivant en arrondissant les résultats à $10^{-1}$ près :
\medskip

\begin{tabularx}{\linewidth}{|c|*{5}{>{\centering \arraybackslash}X|}}\hline
Année					&2001	&2002	&2003	&2004	&2005\\ \hline
Rang de l'année $x_{i}$	&1		&2		&3		&4		&5\\ \hline
$z_{i} = \ln y_{i}$		&4,83	&		&		&		& 	\\ \hline
\end{tabularx}
\medskip

\item  Représenter sur papier millimétré le nuage de points $N_{i}\left(x_{i}~;~z_{i}\right)$ dans un repère orthogonal, avec pour unités graphiques :

\setlength\parindent{5mm}
\begin{itemize}
\item[$\bullet~$] 2 cm en abscisses (commencer à 0)
\item[$\bullet~$] 5 cm en ordonnées (commencer à 4)
\end{itemize}
\setlength\parindent{0mm}

\item  On admet que la droite $\mathscr D$ d'équation $z = 0,179x+4,613$ constitue un bon ajustement affine du nuage de points $N_{i}$.

Tracer $\mathscr D$ dans le repère de la question \textbf{3}.
\item  Le responsable de la centrale de réservation Loisirs Accueil Jura pense que la tendance décrite par la droite $\mathscr D$ se confirmera dans les années à venir.

Déterminer par le calcul le chiffre d'affaires prévisible en 2007 arrondi au millier d'euros près et vérifier graphiquement.

\end{enumerate}
\end{quote}
}

On s'intéressera essentiellement à la question \textbf{3.} dans laquelle:
\begin{list}{\textbullet}{}
\item les unités sont de 2~cm sur l'axe des abscisses et 5~cm sur l'axe des ordonnées;
\item on démarre la graduation à 0 sur l'axe des abscisses et à 4 sur l'axe des ordonnées;
\item le tout étant représenté sur du papier millimétré.
\end{list}

\subsection{Les unités}

Dans cet exercice, il n'y a pas de question à se poser puisque les unités sont imposées par le texte; on les définira donc ainsi:

\smallskip
\hfill{} \verb! \psset{xunit=2cm,yunit=5cm}!\hfill{}

\subsection{Le cadre}

En remplissant le tableau de la question \textbf{2}, on se rend compte que la plus grande valeur de $z$ est $5,52$ pour $x=5$, correspondant à 2005:

\begin{center}
\begin{tabularx}{0.8\linewidth}{|c|*{5}{>{\centering \arraybackslash}X|}}\hline
Année					&2001	&2002	&2003	&2004	&2005\\ \hline
Rang de l'année $x_{i}$	&1		&2		&3		&4		&5\\ \hline
$z_{i} = \ln y_{i}$		&4,83	&	\textcolor{rb}{4,93}	& \textcolor{rb}{5,11}		& \textcolor{rb}{5,3}		& \textcolor{rb}{5,52} 	\\ \hline
\end{tabularx}
\end{center}

Mais à la question \textbf{5} on demande une estimation pour 2007, c'est-à-dire pour $x=7$. En utilisant l'équation de la droite $\mathscr D$, on trouve $z \approx 5,9$.

On prendra donc $x$ entre 0 et 7, et $z$ entre 4 et 6. On débordera un peu en allant de $-0,1$ à $7,5$ pour les abscisses, et de $3,8$ à $6,4$ pour les ordonnées:

\smallskip

\hfill{} \verb!\begin{pspicture}(-0.1,3.8)(7.5,6.4)! \hfill{}

\smallskip

Je préfère un \verb!\pspicture! à un \verb!\pspicture*! pour que les labels sur les axes ne soient pas coupés. À moi de gérer ce qui ne doit pas sortir du cadre!

\subsection{Les axes}

Pas de difficulté particulière pour définir les axes sauf que l'origine a pour coordonnées $(0~;~4)$ et qu'il faut commencer à compter sur les ordonnées à partir de 4 en écrivant \verb!Oy=4!.

On met des flèches au bout des axes (\verb!{->}!). 

Les instructions \verb![$x$,-90][$z$,180]! en fin de ligne servent à écrire la lettre \texttt{x} au bout de l'axe des abscisses vers le bas (à $-90$\degres), et la lettre \texttt{z} en haut de l'axe des ordonnées vers la gauche (à 180\degres).

\smallskip

Cela donne:
 
\hfill{} \verb!\psaxes[Oy=4]{->}(0,4)(0,4)(7.5,6.4)[$x$,-90][$z$,180]! \hfill{}


\subsection{Le papier millimétré}

Pas besoin de package compliqué pour créer du papier millimétré, l'instruction \verb!\psgrid! suffit.

On commence par dissocier les unités de celles que l'on a définies dans \verb!\psset{}!: on met tout à 1~cm, ce qui veut dire que la graduation  principale sera tous les centimètres.

Ensuite on indique que l'on veut une sous-division en 10 parties égales (\verb!\subgriddiv=10!), qu'on ne veut pas de labels puisqu'on les a déjà définis sur les axes (\verb!gridlabels=0!) et enfin que la couleur des divisions et celle des subdivisions sera l'orange (\verb!gridcolor=orange,subgridcolor=orange!).

Enfin on s'occupe de la plage sur laquelle on va dessiner le papier millimétré: la variable $x$ varie de 0 à $7,5$ avec une unité de 2~cm donc on ira en abscisse de 0~cm à 15~cm, la variable $z$ varie de 4 à $6,4$ pour une unité de 5~cm donc on ira en ordonnées de 20~cm à 32~cm.

\smallskip

Ce qui donne finalement:

\begin{verbatim}
\psgrid[unit=1cm,subgriddiv=10,gridlabels=0,gridcolor=orange,subgridcolor=orange]% 
             (0,0)(0,20)(15,32)
\end{verbatim} 

\subsection{Le graphique}

Voici le graphique demandé dans le sujet:

\begin{center}
%%% Définition des unités
\psset{xunit=2cm,yunit=5cm}
%%% Le cadre de travail
\begin{pspicture}(-0.2,3.8)(7.5,6.4)
%%% Le quadrillage millimétré
\psgrid[unit=1cm,subgriddiv=10,gridlabels=0,gridcolor=orange,subgridcolor=orange] (0,0)(0,20)(15,32)
%%% Les axes
\psaxes[Oy=4]{->}(0,4)(0,4)(7.5,6.4)[$x$,-90][$z$,180]
%%% On trace les points du nuage
\psdots[dotstyle=x,dotscale=2,linecolor=blue](1,4.83)(2,4.93)(3,5.11)(4,5.3)(5,5.52)
%%% On trace la droite d'ajustement 
\psplot[linecolor=blue]{0}{7.2}{ 0.179 x mul 4.613 add}
%%% et on place son nom
\uput[-60](6.2,5.7){\blue $\mathscr{D}$}
\end{pspicture}
\end{center}

Je préfère tracer la grille avant les axes pour laisser apparents les traits des axes plutôt que les traits de la grille.

\medskip

\section{Deuxième exemple}

Dans le sujet de baccalauréat hôtellerie posé en métropole en juin 2017, on demandait de tracer le nuage de points défini dans le tableau:

\begin{center}
\vb
\begin{tabularx}{0.85\linewidth}{|m{4.25cm}|*{4}{>{\centering \arraybackslash}X|}}\hline
Année 						             & 2012	& 2013 	& 2014	& 2015\\
\hline
Rang de l'année: $x_i$ 		& 1		    & 2		    & 3		   & 4\\
\hline
Nombre de burgers consommés
(en milliard) : $y_i$		&0,92 	&0,97	&1,07	&1,19\\
\hline 
\end{tabularx}
\end{center}

Il fallait également placer le point moyen G de cette série statistique double,  et tracer  la droite d'ajustement d'équation $y = 0,091 x + 0,81$.

\smallskip

On va partir du graphique correspondant à cet exercice, le décortiquer pour comprendre comment il a été tracé.

\begin{center}
\psset{xunit=1cm,yunit=10cm,labelFontSize=\scriptstyle,comma=true} %%% labelFontSize=\scriptstyle
\begin{pspicture}(-0.5,0.7)(10,1.7)
 \psgrid[unit=1cm,subgriddiv=10,gridlabels=0,gridcolor=orange,subgridcolor=orange](0,0) (0,8)(10,17)
 \psaxes[Oy=0.80,Dy=0.05]{->}(0,0.8)(0,0.8)(10,1.7)
 \psdots[dotstyle=x,dotscale =2](1,0.92)(2,0.97)(3,1.07)(4,1.19)
 \uput*[r](0,1.65){\small Nombre de burgers en milliard}
 \uput*[u](8.5,0.8){\small Rang de l'année}
 \psplot[linecolor=red]{0.8}{9.1}{0.091 x mul 0.81 add}
 \uput[dr](2.5,1.0375){\red G} \psdots[linecolor=red](2.5,1.0375)
\end{pspicture}
\end{center}

\begin{list}{\textbullet}{On observe ce graphique.}

\item Les abscisses vont de 0 à 10 de centimètre en centimètre. Les labels sont marqués de 0 à 9.

\item Les ordonnées vont de $0,80$ à $1,70$ et l'axe est gradué de $0,80$ à $1,65$ par pas de $0,05$. \\
Les labels sont écrits avec une virgule comme séparateur décimal (et pas un point).\\
Sur cet axe, 1~cm représente $0,1$.

\item L'origine a pour coordonnées $(0~;~0,80)$.

\item Les points et la droite sont représentés dans un quadrillage millimétré.

\end{list}

\medskip

Dans \verb!\psset!:
\begin{list}{\textbullet}{}
\item on fixera 1~cm comme unité en abscisse et $10$~cm comme unité en ordonnée;
\item on activera l'option \verb!comma=true! pour avoir la virgule comme séparateur décimal;
\item on entrera \verb!labelFontSize=\scriptstyle! pour avoir une petite police de caractères pour les labels.
\end{list}

\medskip

Dans \verb!\psgrid!:
\begin{list}{\textbullet}{}
\item on définit les subdivisions et les couleurs comme dans l'exemple précédent;
\item on trace le quadrillage sur la plage \verb!(0,0)(0,8)(10,17)!.
\end{list}

\medskip

Dans \verb!\psaxes!:
\begin{list}{\textbullet}{}
\item on fixe l'origine des ordonnées en entrant \verb!Oy=0,8!;
\item on gradue l'axe des ordonnées tous les demi-centimètres en entrant \verb!Dy=0,05!;
\item on définit la plage utile en traçant les axes sur  \verb!(0,0.8)(0,0.8)(10,1.7)!.
\end{list}

Enfin on écrira les étiquettes des axes au moyen d'un \verb!\uput*[](){}! pour que le  fond soit blanc, ce qui rend le texte plus lisible.

\section*{Troisième exemple}

Dernier exemple pour voir qu'on peut avoir besoin d'un autre outil!

Regardons ce graphique:

\begin{center}
\psset{xunit=0.2cm,yunit=0.005cm}
\begin{pspicture}(10,600)(50,2000)
%%% \def\psvlabel#1{\np{#1}} %%% pour modifier les labels en ordonnées - ne fonctionne pas !
\psgrid[unit=1cm,subgriddiv=10,gridlabels=0,gridcolor=orange,subgridcolor=orange] (2,4)(10,10)
\psaxes[Dx=5,Dy=200,labels=x,Ox=10,Oy=800]{->}(10,800)(10,800)(50,2000) %[$x$,-90][$y$,180]
\multido{\i=800+200}{6}{\uput[l](10,\i){\np{\i}}}
\psdots[dotstyle=x,dotscale=1.5,linecolor=blue](15,850)(20,1133)(25,1330)(30,1410)(35,1480)(40,1530)(45,1590)
%\psplot[linecolor=blue,plotpoints=2000]{0}{45}{x dup x -3 div 15 add mul mul}
%\psset{linecolor=red,arrowscale=1.6}
%\psline[linewidth=1.2pt](30,35)(120,35)
%\psline[ArrowInside=->,ArrowInsideNo=3](38.16,35)(38.16,0)
%\psline[ArrowInside=->,ArrowInsideNo=3](94.34,35)(94.34,0)
%\psline[linewidth=1.4pt]{[-]}(38.16,0)(94.34,0)
\end{pspicture}
\end{center}

Le quadrillage est millimétré, pas de problème!

L'origine est en $(10~;~800)$; on sait faire!

La graduation sur l'axe des ordonnées va de 200 en 200, on sait faire également!

Mais cette graduation respecte les normes en vigueur, à savoir la séparation des milliers pour les nombres entiers s'écrivant avec au moins 4 chiffres. L'écriture des labels sur les axes ne sait pas faire\dots{} ou c'est moi qui n'ai pas su faire. 
J'ai bien essayé avec un \verb!psvlabel! qui permet de modifier l'aspect des labels verticaux, mais cette variable ne semble pas compatible avec le package \verb!numprint! qui écrit les nombres correctement. 

Si quelqu'un y arrive un jour, qu'il me donne la solution!

\smallskip

Il faut donc utiliser un autre moyen.

\begin{list}{\textbullet}{}
\item On commence par empêcher l'écriture des labels en ordonnée par \verb!\psaxes!; il faut donc limiter leur écriture à l'axe des abscisses par l'instruction \verb!labels=x!. Cette variable \verb!labels! peut avoir 3 valeurs: \texttt{x}, \texttt{y} ou \texttt{all} dont on comprend facilement l'utilisation.
\item Ensuite on crée une graduation \og à la main \fg{} au moyen de l'instruction \verb!\multido! et en utilisant le package \texttt{numprint}  que l'on aura chargé dans le préambule:

\hfill{} \verb!\multido{\i=800+200}{6}{\uput[l](10,\i){\np{\i}}}! \hfill{}

Ce qui veut dire: on effectue 6 fois, pour des valeurs de la variable \verb!\i! démarrant à 800 et augmentant de 200 à chaque pas, l'écriture de \verb!\np{\i}! sur la gauche du point de coordonnées \verb!(10,\i)!.

\item Pourquoi alors laisser \texttt{Dy=200} comme option dans \verb!\psaxes!?

Bonne question. Essayez de retirer cette option et voyez alors le résultat!

On peut aussi écrire \texttt{ticks=x} à la place de \texttt{Dy=200} mais je trouve le résultat moins joli.
\end{list}

\bigskip

Pour en savoir un peu plus sur  \verb!\multido!, vous pouvez relire la chronique que j'avais consacrée à cette instruction en novembre 2013:

\url{http://latexetmath.canalblog.com/archives/2013/11/06/28375283.html}

\end{document}