Page 1 sur 1

[pstricks] Dégradé dans un diagramme en barres

MessagePosté: Mardi 21 Janvier 2014, 11:11
par agnès
Bonjour, j'ai fait un diagramme en barres avec pst-bar et je voudrais colorier chaque barre avec un dégradé, mais pst-grad colorie le graphique en entier.
Quelqu'un a-t-il déjà été confronté au problème ?
Code: Tout sélectionner
\documentclass{article}
\pagestyle{empty}
 
\usepackage{pstricks,pst-bar,pst-grad}
\begin{document}
 
\savedata{\dataOne}[{{15,3},{25,5},{35,6},
{45,4},{55,3}}]
\psset{xunit=.1cm,yunit=0.5cm}
\begin{pspicture}(-1.5,-1)(7,7)
\psaxes[axesstyle=none,ticks=none,labels=x,Dx=10,Ox=125]{-}(0,0)(0,-1)(60,15)
\dataplot[plotstyle=bar,barwidth=1]{\dataOne}
\rput(15,3.5){$ 3 $}
\rput(25,5.5){$ 5 $}
\rput(35,6.5){$ 6 $}
\rput(45,4.5){$ 4 $}
\rput(55,3.5){$ 3 $}
\end{pspicture}
\end{document}

Re: [pstricks] Dégradé dans un diagramme en barres

MessagePosté: Mardi 21 Janvier 2014, 15:51
par kojak
Bonjour,

Moi, je n'ai aucune couleur sur le pdf. Mais avec ça, j'en ai

 
Code: Tout sélectionner
\dataplot[plotstyle=bar,barwidth=1,fillstyle = gradient , gradbegin=orange , gradend =blue]{\dataOne}

Re: [pstricks] Dégradé dans un diagramme en barres

MessagePosté: Mercredi 22 Janvier 2014, 21:59
par agnès
Bonjour,
oui, mais cela donne un dégradé sur l'ensemble de la figure ; moi j'aurais aimé que le dégradé recommence à chaque barre.
Je vais laisser tomber.
Merci

Re: [pstricks] Dégradé dans un diagramme en barres

MessagePosté: Jeudi 23 Janvier 2014, 03:02
par balf
En utilisant des commandes de pst-bar, vous pouvez obtenir un dégradé :
barchart.png
barchart.png (2.09 Kio) Vu 1437 fois


Voici le code :
Code: Tout sélectionner
\documentclass{article}
\pagestyle{empty}

\usepackage{pstricks,pst-bar,pst-grad}

\newpsbarstyle{gr-red}{gradbegin = red, gradmidpoint = 0.1,gradend = white,  fillstyle=gradient , framearc =0}

\begin{document}
\psset{xunit=1.25cm,yunit=0.5cm, }
\begin{pspicture}(-1.5,-1)(7,7)%
\readpsbardata{\data}{databarchart.csv}%
\psset{barsep = 0, barcolsep = 0.2 ,barstyle = gr-red}%
\psbarchart{\data}%%
\uput[u](0.5,3){$ 3 $}
\uput[u](1.5,5){$ 5 $}
\uput[u](2.5,6){$ 6 $}
\uput[u](3.5,4){$ 4 $}
\uput[u](4.5,3){$ 3 $}
\end{pspicture}
\end{document}


À quoi il faut ajouter les données sous forme d'un fichier csv mentionné dans le code et dont voici le contenu :
Code: Tout sélectionner
15,25,35,45,55
3,5,6,4,3


Le principal problème est qu'on ne peut obtenir un vrai histogramme (ça crée des lignes d'épaisseur double à la frontière entre deux rectangles). D'autre part, je n'ai pas bien compris pourquoi les données 15, 25 ,…, correspondent dans votre code à Ox = 125 et Dx =10. Mais ce que vous voulez obtenir n'est pas très clair (hormis le dégradé).

Je ne sais donc pas si c'est très loin de ce que vous souhaitez, mais en tout cas on peut obtenir simplement un dégradé sans avoir à tracer tous les rectangles à la main.

B.A.

Re: [pstricks] Dégradé dans un diagramme en barres

MessagePosté: Vendredi 24 Janvier 2014, 09:39
par agnès
Bonjour et merci.
En effet le dégradé donne ce que je veux avec la ligne
Code: Tout sélectionner
    \newpsbarstyle{gr-red}{gradangle=90,gradbegin = gray, gradmidpoint = 0.5,gradend = white,  fillstyle=gradient, framearc =0}

je voulais un histogramme ; je n'ai pas essayé à l'impression mais en ajoutant linewidth=0 dans psset ça peut peut-être marcher.
hist2.png
hist2.png (5.37 Kio) Vu 1405 fois

Mon souci maintenant est avec la graduation : les données sont en fait [135,145[, [145,155[, etc.
hist1.png
hist1.png (5.28 Kio) Vu 1405 fois

Je ne suis jamais arrivée à paramétrer correctement psaxes pour commencer à 135 c'est pourquoi j'avais changé les données. Je peux recoller un axe comme je l'avais fait mais je ne vois pas comment supprimer l'étiquette des données avec pstbar.

Re: [pstricks] Dégradé dans un diagramme en barres

MessagePosté: Vendredi 24 Janvier 2014, 09:53
par agnès
Ah ben j'ai trouvé.
J'ai simplement supprimé la première ligne du fichier csv.

Re: [pstricks] Dégradé dans un diagramme en barres

MessagePosté: Vendredi 24 Janvier 2014, 18:31
par balf
Je pense que ce code donne un résultat proche de ce que vous voulez :
Code: Tout sélectionner
\documentclass{article}
\pagestyle{empty}

\usepackage{pstricks,pst-bar,pst-grad}
\usepackage{csvsimple}

\newpsbarstyle{gr-red}{gradbegin = red, gradmidpoint = 0.5,gradend = red!25!white, gradangle = 90, fillstyle=gradient , framearc =0}

\begin{document}

\savedata{\dataOne}[{{135,3},{145,5},{155,6},{165,4},{175,3}}]
\psset{yunit=0.5cm, }%
\begin{pspicture}(-1.5,-1)(7,7)%
\readpsbardata[header = false]{\data}{databarchart1.csv}%
{\psset{barsep = 0, barcolsep = 0 ,barstyle = gr-red, linestyle = none}%
\psbarchart{\data}}%%
\uput[u](0.5,3){$ 3 $}
\uput[u](1.5,5){$ 5 $}
\uput[u](2.5,6){$ 6 $}
\uput[u](3.5,4){$ 4 $}
\uput[u](4.5,3){$ 3 $}
\psset{linecolor=blue}
\psaxes[Ox = 135,Dx = 10,dx = 1,ticks = none, labels = x](0,0)(5,0)
\psline(1,0)(0,0)(0,1) %% cette ligne devrait être inutile
\psset{origin = {-13,0}, xunit = 0.1cm}
\dataplot[plotstyle=bar,barwidth=1]{\data}%One
\end{pspicture}

\end{document}


Cela dit je ne suis pas totalement satisfait du code, d'abord à cause de la ligne inutile (c'est tout ce que j'ai trouvé pour éviter un mauvais raccord des lignes à l'origine). Ensuite parce qu'on utilise en fin de compte 2 fichiers de données : le .csv externe, et un fichier écrit en clair dans le code-source comme argument de la commande \savedata. À mon avis, on devrait pouvoir extraire les 2 fichiers utiles d'un unique fichier .csv, puisqu'il existe des outils de manipulation des données en latex. Mais je n'ai pas réussi à voir si, ni a fortiori comment, d'un fichier contenant sur chaque ligne la liste des couples tels que 135,3, on pouvait fabriquer un argument accepté par la commande \savedata.

B.A.

Re: [pstricks] Dégradé dans un diagramme en barres

MessagePosté: Samedi 25 Janvier 2014, 11:29
par agnès
Bonjour et merci,
je ne comprends pas à quoi sert ici le savedata puisque je ne vois pas d'autre utilisation du dataOne ? je pensais que l'utilisation de pst-grad imposait de recourir à un csv, mais que du coup on pouvait se passer de savedata. Je ne connaissais pas l'argument [header = false], j'avais résolu le problème en supprimant la ligne. Je mets ici le code auquel j'étais parvenue, qui est assez similaire, et qui utilise un csv externe.
Code: Tout sélectionner
\documentclass{article}
\pagestyle{empty}
\usepackage{pstricks,pst-bar,pst-grad}
\begin{filecontents*}{data1.csv}
3,5,6,4,3
\end{filecontents*}
\begin{document}
    \newpsbarstyle{gr-red}{gradangle=90,gradbegin = gray, gradmidpoint = 0.5,gradend = white,  fillstyle=gradient, framearc =0}
     \psset{xunit=.1cm,yunit=0.5cm}
    \begin{pspicture}(-1.5,-1)(7,7)%
 \psaxes[axesstyle=none,ticks=none,labels=x,Dx=10,Ox=135]{-}(0,0)(50,15)
   \psset{xunit=1cm}
  \readpsbardata{\data}{data1.csv}%
    \psset{barsep =0 , barcolsep = 0,linewidth=0 ,barstyle = gr-red}%
  \psbarchart{\data}%%
    \uput[u](0.5,3){$ 3 $}
    \uput[u](1.5,5){$ 5 $}
    \uput[u](2.5,6){$ 6 $}
    \uput[u](3.5,4){$ 4 $}
    \uput[u](4.5,3){$ 3 $}
    \end{pspicture}
\end{document} 

et le résultat
hist3.png
hist3.png (2.46 Kio) Vu 1331 fois
qui est tout à fait ce que je voulais.

Re: [pstricks] Dégradé dans un diagramme en barres

MessagePosté: Samedi 25 Janvier 2014, 15:27
par balf
La commande \savedata sert à pouvoir utiliser \dataplot, qui donne l'histogramme (« non rempli ») : je suis obligé d'utiliser \psbarchart avec linestyle=none, parce que, sinon, lorsque deux rectangles sont contigus, la partie commune du contour a une épaisseur double (les contours des rectangles sont juxtaposés au lieu de se chevaucher). Ça se voit très bien en utilisant la loupe de gsview sous windows. D'où l'idée de faire l'histogramme en deux temps : le remplissage sans les contours avec \psbarchart, qui permet d'avoir le dégradé, puis les contours avec \dataplot (qui ne permet pas un dégradé rectangle par rectangle).
Maintenant, peut-être faudrait-il demander à Herbert Voss de prévoir dans pst-bar de quoi tracer des histogrammes qui permettrait d'éviter ce chevauchement des contour tout en continuant d'assurer des traitements (dégradés et autres) rectangle par rectangle — et aussi de permettre d'ajouter les valeurs au-dessus de chaque rectangle, en plus de la légende au-dessous.


Cela dit, j'arrive bien à compiler votre code et à passer dvips dessus, mais l'affichage de gsview me renvoie un message d'erreur — auquel je ne comprends rien, bien entendu. Et impossible d'afficher.

Pour finir : vous n'avez pas osé rebaptiser le style gr-red en gris-gris ? :)

B.A.

Re: [pstricks] Dégradé dans un diagramme en barres

MessagePosté: Dimanche 26 Janvier 2014, 11:57
par agnès
Merci, je comprends mieux.