Construction d'un diagramme en barres en 3D

Tout ce qui concerne l'utilisation ou l'installation de LaTeX.

Modérateur: gdm_tex

Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.

Construction d'un diagramme en barres en 3D

Messagepar evariste_G » Samedi 13 Juin 2009, 14:05

Bonjour.

Depuis quelques jours, je travaille sur une macro qui construit des histogrammes en 3D.

Mon travail est achevé et je me permets de vous le présenter au cas où il y aurait des intéressés. Bien entendu, je sous ouvert à toutes remarques.

Merci à pg pour son aide si précieuse (comme l'eau ... :) ) car je ne suis pas un expert en programmation LaTex.

Le code suivant :

Code: Tout sélectionner
\documentclass[10pt,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{xcolor}
\usepackage{tikz}
\usepackage{xifthen}
\usetikzlibrary[arrows,fadings]

\newif\iffirstiteration
\newcounter{nb}

\newcommand{\barre}[6]
{ % n° colonne, largeur, hauteur, coefficient de profondeur, couleur, texte
   \def\Ey{#3}
   \pgfmathparse{(#1-1)*#2} \let\Ex\pgfmathresult
   \pgfmathparse{#4*cos(-135)+\Ex} \let\Ax\pgfmathresult
   \pgfmathparse{#4*sin(-135)+\Ey} \let\Ay\pgfmathresult
   \pgfmathparse{\Ax+#2} \let\Bx\pgfmathresult
   \pgfmathparse{\Ex+#2} \let\Fx\pgfmathresult 
   \pgfmathparse{\Ay-#3} \let\Cy\pgfmathresult
   \filldraw[fill=#5,draw=black] (\Ax,\Ay) rectangle +(#2,-#3);
   \filldraw[fill=#5!50,draw=black] (\Ax,\Ay) -- (\Ex,\Ey) -- (\Fx,\Ey) -- (\Bx,\Ay) -- cycle;
   \filldraw[fill=#5!20,draw=black] (\Bx,\Ay) -- (\Fx,\Ey) -- (\Fx,0) -- (\Bx,\Cy) -- cycle;
   \pgfmathparse{\Ax+#2/2} \let\texteB\pgfmathresult
   \node[rotate=45,below left] at (\texteB,\Cy) {\begin{tiny}\textcolor{#5}{#6}\end{tiny}};
}

\newcommand{\repere}[3]
{ % xmax, ymax, profondeur max
   \tikzfading[name=fade right,left color=transparent!0,right color=transparent!100]
   \tikzfading[name=fade left,left color=transparent!100,right color=transparent!0]
   \tikzfading[name=fade out,inner color=transparent!0,outer color=transparent!100]
   \pgfmathparse{#3*cos(-135)} \let\X\pgfmathresult
   \pgfmathparse{#3*sin(-135)} \let\Y\pgfmathresult
   \pgfmathparse{4*#1/3} \let\XXr\pgfmathresult
   \pgfmathparse{2*#1/3} \let\Xr\pgfmathresult
   \pgfmathparse{\Y+#2-0.5} \let\ZZ\pgfmathresult
   \pgfmathparse{#2-0.5} \let\YY\pgfmathresult
   \pgfmathparse{#1-0.3} \let\XX\pgfmathresult
   \pgfmathparse{\X+#1} \let\XXX\pgfmathresult
   \pgfmathparse{#1/2} \let\xsh\pgfmathresult
   \pgfmathparse{#3/2} \let\ysh\pgfmathresult
   \fill [gray!50,path fading=fade out,fading transform={xshift=-0.75 cm,yshift=0.5 cm}] (0,0) -- (\X,\Y) .. controls (\Xr,-#3) and (\XXr,\Y) .. (1.85*#1,0.5) -- cycle;
   \fill[white] (0,0) rectangle +(#1+1,\YY);
   \fill[gray!50,path fading=fade right] (0,0) rectangle +(#1,\YY);
   \fill[gray!50,path fading=fade left] (0,0) -- (0,\YY) -- (\X,\ZZ) -- (\X,\Y) -- cycle;
   \draw[->,>=stealth'] (0,0) -- (#1,0);
   \draw[->,>=stealth'] (0,0) -- (0,#2);   
   \draw[->,>=stealth'] (0,0) -- (\X,\Y);     
   \foreach \i in {1,2,...,\YY}
   {
      \pgfmathparse{(#3-0.2)*cos(-135)} \let\ZX\pgfmathresult
      \pgfmathparse{(#3-0.2)*sin(-135)+\i} \let\ZY\pgfmathresult
      \draw[dotted] (\ZX,\ZY) node[color=gray,left] {\begin{tiny}\i\end{tiny}} -- (0,\i) -- (\XX,\i) node[color=gray,right] {\begin{tiny}\i\end{tiny}};
     
   }
}

\def\spacebar[#1]#2{% échelle en X, échelle en Y, paramètres
   \begin{tikzpicture}[#1]
    \firstiterationtrue
    \def\xmaximum{0}
    \setcounter{nb}{0}
    \foreach \hauteur/\largeur/\coefprof/\couleur/\texte in {#2}
    {
      \ifx\largeur\empty\def\largeur{1}\fi
      \ifx\coefprof\empty\def\coefprof{0.33}\fi
      \iffirstiteration
        \xdef\hauteurmax{\hauteur}
        \xdef\coefprofmax{\coefprof}
      \else
        \ifnum\hauteurmax>\hauteur   
        \else
          \xdef\hauteurmax{\hauteur}
        \fi
        \pgfmathmax{\coefprofmax}{\coefprof}\global\let\coefprofmax\pgfmathresult
      \fi
      \global\firstiterationfalse     
      \pgfmathparse{\largeur+\xmaximum}\global\let\xmaximum\pgfmathresult       
    }
   
   \pgfmathparse{\xmaximum+1}\global\let\xmaximum\pgfmathresult   
   \pgfmathparse{\coefprofmax+0.66}\global\let\coefprofmax\pgfmathresult 
   \pgfmathparse{\hauteurmax+1}\global\let\hauteurmax\pgfmathresult 
   
   \repere{\xmaximum}{\hauteurmax}{\coefprofmax}
   
   \foreach \hauteur/\largeur/\coefprof/\couleur/\texte in {#2}
   {         
      \stepcounter{nb}
      \ifx\largeur\empty\def\largeur{1}\fi
      \ifx\coefprof\empty\def\coefprof{0.33}\fi
      \ifx\couleur\empty\def\couleur{blue}\fi
      \barre{\thenb}{\largeur}{\hauteur}{\coefprof}{\couleur}{\texte}
   }
   \end{tikzpicture}
}

\begin{document}

% Synthaxe : \spacebar{effectif, largeur de la colonne, profondeur de la colonne, couleur, caractère observé}

\spacebar[scale=1]{
       3/1/0.66/green/Bus,%
       5/1/0.33/red/Vélo,%
       2/1/0.66/purple/A pieds,%
       6/1/0.33/brown/Voiture,%
       4/1/0.66/magenta/Hélicoptère}

\end{document}


donne ceci :

diagramme.jpg


EDIT : je souhaite créer un fichier .sty dans lequel je mettrais ceci, avec des options pour la commande \spacebar.
Par exemple : \spacebar[grad] ferait inscrire les indications de graduation (en gris). Pour cela, j'utilise :

Code: Tout sélectionner
\define@boolkey[] {spacebar} {grad}[true]{}
\define@cmdkey [] {spacebar} {scale}{}


Mais là, ça me met le message suivant pour ces lignes :

Code: Tout sélectionner
Undefined control sequence


Comment cela se fait-il ?
Mathématiques, LaTeX et Python : http://www.mathweb.fr
Cours particuliers de maths et de NSI : https://cours-particuliers-bordeaux.fr/
evariste_G
Téra-utilisateur
 
Messages: 1433
Inscription: Vendredi 19 Décembre 2008, 19:13
Localisation: Bordeaux
Statut actuel: Actif et salarié | Enseignant

Publicité

Re: Construction d'un diagramme en barres en 3D

Messagepar MB » Mercredi 08 Juillet 2009, 20:06

Je n'ai pas la réponse à ta question.
Je n'avais pas vu ce post, mais je te remercie pour le partage de ce code, d'autant que le résultat est vraiment très joli. :wink:
MB (Pas d'aide en Message Privé)
Merci d'utiliser $\LaTeX$ (voir ici) et d'éviter le style SMS pour la lisibilité des messages.
MB
Administrateur
 
Messages: 6890
Inscription: Samedi 28 Mai 2005, 13:23
Localisation: Créteil
Statut actuel: Actif et salarié | Enseignant

Re: Construction d'un diagramme en barres en 3D

Messagepar evariste_G » Jeudi 09 Juillet 2009, 13:53

Merci :D Au moins une chose que j'ai faite qui plaît à quelqu'un ... :)
Un forum, ça sert aussi à partager (et comme je fais souvent appel aux bonnes âmes, il est naturel de rendre en retour).
Mathématiques, LaTeX et Python : http://www.mathweb.fr
Cours particuliers de maths et de NSI : https://cours-particuliers-bordeaux.fr/
evariste_G
Téra-utilisateur
 
Messages: 1433
Inscription: Vendredi 19 Décembre 2008, 19:13
Localisation: Bordeaux
Statut actuel: Actif et salarié | Enseignant

Re: Construction d'un diagramme en barres en 3D

Messagepar projetmbc » Jeudi 09 Juillet 2009, 13:55

Moi aussi ça me plait beaucoup... :clapping:
projetmbc
Péta-utilisateur
 
Messages: 1897
Inscription: Samedi 29 Décembre 2007, 00:58
Statut actuel: Actif et salarié | Enseignant

Re: Construction d'un diagramme en barres en 3D

Messagepar Altermundus » Mardi 14 Juillet 2009, 12:04

projetmbc a écrit:Moi aussi ça me plait beaucoup... :clapping:


Bonjour

Avec le code donné j'ai une erreur bizarre

Package PGF Math Error: Unknown function `getargs'.

Alain Matthes
Altermundus
Giga-utilisateur
 
Messages: 557
Inscription: Lundi 28 Mai 2007, 09:31
Localisation: Paris
Statut actuel: Actif et salarié | Enseignant

Re: Construction d'un diagramme en barres en 3D

Messagepar plop08 » Mardi 14 Juillet 2009, 12:23

je l'avais testé chez moi sans problème de compil, tu as surement un paquet manquant.
plop08
Téra-utilisateur
 
Messages: 1127
Inscription: Mardi 28 Avril 2009, 18:05
Localisation: Reims
Statut actuel: Actif et salarié | Enseignant

Re: Construction d'un diagramme en barres en 3D

Messagepar evariste_G » Mardi 14 Juillet 2009, 12:25

Altermundus a écrit:
projetmbc a écrit:Moi aussi ça me plait beaucoup... :clapping:


Bonjour

Avec le code donné j'ai une erreur bizarre

Package PGF Math Error: Unknown function `getargs'.

Alain Matthes


Là, je ne pourrais pas te dire la raison de cette erreur ... :roll: Comme le code fonctionne chez certains, peut-être est-ce dû à la façon dont tu compiles ? (je dis ça mais ça me semble peu probable ... d'un autre côté, je ne m'y connais pas trop ...). J'ai fais ça sous windows et toi, tu travailles sous mac me semble-t-il ...
Mathématiques, LaTeX et Python : http://www.mathweb.fr
Cours particuliers de maths et de NSI : https://cours-particuliers-bordeaux.fr/
evariste_G
Téra-utilisateur
 
Messages: 1433
Inscription: Vendredi 19 Décembre 2008, 19:13
Localisation: Bordeaux
Statut actuel: Actif et salarié | Enseignant

Re: Construction d'un diagramme en barres en 3D

Messagepar plop08 » Mardi 14 Juillet 2009, 12:36

Je viens de le compiler (après un copier coller donc sans modif) sous mac et ça passe.
plop08
Téra-utilisateur
 
Messages: 1127
Inscription: Mardi 28 Avril 2009, 18:05
Localisation: Reims
Statut actuel: Actif et salarié | Enseignant

Re: Construction d'un diagramme en barres en 3D

Messagepar Altermundus » Mardi 14 Juillet 2009, 13:05

plop08 a écrit:Je viens de le compiler (après un copier coller donc sans modif) sous mac et ça passe.


J'ai le coupable ! le code ne passe pas avec la version cvs de tikz . Je vais voir si je peux apporter une modification et j'en profiterai pour voir si je peux placer des "keys" pour les options.

Alain Matthes
Altermundus
Giga-utilisateur
 
Messages: 557
Inscription: Lundi 28 Mai 2007, 09:31
Localisation: Paris
Statut actuel: Actif et salarié | Enseignant

Re: Construction d'un diagramme en barres en 3D

Messagepar Altermundus » Mardi 14 Juillet 2009, 15:01

Le problème vient de

Code: Tout sélectionner
     \global\firstiterationfalse


On peut se passer de ce \global et je pense qu'avec la version pgf 2.00 cela doit fonctionner.
Ce que je ne comprends pas c'est l'erreur provoqué avec la version cvs.

Sinon pour le code, il faudrait déjà ne pas mettre tikzpicture dans la macro.

Code: Tout sélectionner
 \begin{tikzpicture}[scale=2]
\spacebar{%
       3/1/0.66/green/Bus,%
       5/1/0.33/red/Vélo,%
       2/1/0.66/purple/A pieds,%
       6/1/0.33/brown/Voiture,%
       4/1/0.66/magenta/Hélicoptère}
   \end{tikzpicture}


Cela permet à l'utilisateur sans toucher à la macro d'ajouter ses propres commandes tikz s'il le souhaite

J'ai fait un début de package sur les stats et pour les "keys" cela peut-être utile voir (attention c'est en utf8)

http://altermundus.fr/pages/downloads/tkz-tukey.sty

et la doc http://altermundus.fr/pages/downloads/TKZdoc-tk.pdf

je n'ai pas créé de diagrammes en 3D car je trouve cela pas nécessaire et dangereux en statistiques mais cela est un autre problème :)

Alain Matthes
Altermundus
Giga-utilisateur
 
Messages: 557
Inscription: Lundi 28 Mai 2007, 09:31
Localisation: Paris
Statut actuel: Actif et salarié | Enseignant

Re: Construction d'un diagramme en barres en 3D

Messagepar sintri » Dimanche 27 Janvier 2019, 19:27

J'ai bien peur que cela soit trop tard pour déterrer ce sujet, mais pour mon TPE j'aurais besoin d'un diagramme 3D comportant deux paramètres et une seule échelle… quelqu'un saurait-il les modifications possibles dans la macro pour arriver à un tel résultat ?
sintri
Utilisateur
 
Messages: 3
Inscription: Dimanche 27 Janvier 2019, 19:22
Statut actuel: Lycée | 1ère S

Re: Construction d'un diagramme en barres en 3D

Messagepar marco56 » Dimanche 27 Janvier 2019, 19:54

Un nouveau fil avec un ecm (exemple complet minimal) serait le bienvenu.
marco56
Giga-utilisateur
 
Messages: 767
Inscription: Jeudi 25 Novembre 2010, 22:10
Statut actuel: Actif et salarié | Enseignant

Re: Construction d'un diagramme en barres en 3D

Messagepar sintri » Dimanche 27 Janvier 2019, 20:29

marco56 a écrit:Un nouveau fil avec un ecm (exemple complet minimal) serait le bienvenu.


Voilà qui est fait!
sintri
Utilisateur
 
Messages: 3
Inscription: Dimanche 27 Janvier 2019, 19:22
Statut actuel: Lycée | 1ère S


Retourner vers LaTeX

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Grapeshot [Crawler], MSN [Bot], po220 et 16 invités