2012-05-15 7 views
4

Je voudrais obtenir un fond transparent dans ma figure gnuplot. Ce que je jusqu'à présent est codé:Fond transparent dans gnuplot multiplot

#! /usr/bin/python 

from numpy import * 
import Gnuplot as gp 
import Gnuplot.funcutils 

x = (1,2,3) 
y=(2,4,5) 
x1 = (3,6,8) 
g = gp.Gnuplot() 
g("set terminal svg size 200,400") 
g("set output 'filename.svg'") 
g("unset xtics") 
g("unset ytics") 
g("set multiplot layout 3,1 title 'Title here'") 
g("set object 1 rectangle from screen 0,0 to screen 1,1 fillcolor rgb '#ff0000'  behind") 
#First 
g("set tmargin 2") 
g("set title 'Plot'") 
g("unset key") 
d = gp.Data(x,y,with_="lines") 
g.plot(d) 
#Secon 
g("set title 'Plot2'") 
g("unset key") 
d1 = gp.Data(x1,y,with_="lines") 
g.plot(d1) 
#Third 
g("set title 'Plot3'") 
g("unset key") 
d2 = gp.Data(y,x,with_="lines") 
g.plot(d2) 
g("unset multiplot") 

J'ai obtenu un écran rouge, mais seulement la troisième parcelle. (Ouais, je dois changer le combo rgb pour obtenir la couleur d'arrière-plan transparent. Mais, ce qui est tout?)

Merci à l'avance, FB

+0

Quel système d'exploitation utilisez-vous - quel svg viewer? Le script ci-dessus fonctionne pour Ubuntu Linux avec Eye of the Gnome comme viewr (si je supprime le code 'set object'). Bien sûr, vous pouvez * rendre * l'arrière-plan transparent en définissant l'objet rectangle 1 ... fillstyle transparent solide 0 (0-1 est le niveau de transparence, 0 étant complètement transparent) – mgilson

+0

Aussi, quelle version de gnuplot utilisez-vous? ? – mgilson

+0

Question finale - L'objectif final est-il d'avoir une couleur donnée derrière toutes les parcelles? Si c'est le cas, vous pouvez obtenir ce ** sans transparence ** dans n'importe quel terminal qui supporte les objets (je peux facilement modifier votre script pour y parvenir). – mgilson

Répondre

4

Gnuplot peut produire des fonds transparents directement, mais pas pour tous les formats. Par exemple, cela peut être fait pour .png:

set term png transparent truecolor 
set output 'plot.png' 
plot sin(x) 

transparent gère la transparence pour l'arrière-plan, et truecolor pour les objets transparents/remplissages de terrain. Une autre façon d'obtenir un arrière-plan transparent avec gnuplot est de produire un fichier .eps et de le convertir en .png ou en format raster prenant en charge la transparence.

exemple Gnuplot:

set terminal postscript enhanced color 
set output 'plot.eps' 
plot sin(x) 

En bash:

convert plot.eps -rotate 90 plot.png 

Le .png résultant a un fond transparent où les .eps ne fonctionne pas. Cela peut être lié à la façon dont imagemagick gère la transparence. Il n'en est pas de même pour moi de convertir .svg en .png; il a toujours un fond blanc.

Vous pourriez avoir de la chance en utilisant un éditeur de graphiques vectoriels comme Inkscape pour ajouter de la transparence.

+1

Gnuplot peut faire de la transparence dans les fichiers 'png'. 'set terminal png transparent truecolor' devrait faire l'affaire (transparent gère l'arrière-plan tandis que truecolor gère tous les autres objets qui peuvent être transparents) - ou avec pngcairo -' set term pngcairo transparent'. Faire tout cela dans gnuplot donnera probablement une image plus nette que vous obtiendriez de la conversion (surtout avec du texte) – mgilson

+0

Vous avez raison! J'ai mis à jour ma réponse pour inclure certains de vos commentaires. – andyras