6
votes

Comment réduire la sortie du format EPS de gnuplot?

J'ai une grande quantité de données à partir de laquelle je voudrais créer un tracé de dispersion et l'inclure dans mon document de latex. J'utilise Gnuplot pour générer le tracé de dispersion avec le format de sortie EPSLATEX pour pouvoir importer facilement les données sur mon document de latex.

Mon problème est que les fichiers EPS sont trop gros (environ 14 Mo par figure) qui entraîneront un très grand document de sortie. Il est clair que la raison est que toutes les données sont incluses dans le fichier EPS qui n'est pas nécessaire.

Cependant, je n'ai pas pu trouver un moyen de compresser le fichier EPS. Le seul moyen est de réduire le nombre de points d'échantillonnage que je n'ai que pour des raisons techniques, je préférerais ne pas le faire.

Quelqu'un peut-il me suggérer un moyen de réduire la taille des parcelles EPS?

J'ai essayé d'utiliser ImageMagick et j'ai réduit la résolution des fichiers EPS (comme convert -units pixelsperinch trot.eps -densatu2 300 tracé2.eps ) mais il rétrécit les dimensions qui ne sont pas ce que je veux .

Merci d'avance,


0 commentaires

3 Réponses :


2
votes

Le problème avec les fichiers .eps n'est pas nécessairement résolution (ce sont des graphiques vectoriels), mais la quantité d'informations gnuplot inclut lors de la création du fichier. Gnuplot a tendance à dessiner des fichiers .ps avec beaucoup d'informations supplémentaires, en particulier pour les parcelles 2D et les parcelles avec de nombreux points. Par exemple, pour une grille de carrés rouges jointes aux bords pour faire une grande place rouge, Gnuplot attira des tonnes de petits carrés rouges au lieu de la grande place. Ce problème est mentionné à la fin de Ce blog post , où ils disent que tracé ... avec image crée une sortie beaucoup plus petite que SPLOT pour effectuer des cartes de chaleur.

On dirait que vous n'utilisez pas SPLOT , cependant, vous pouvez donc essayer de créer un fichier .pdf au lieu de .eps, et si vous avez besoin de .eps le convertir en utilisant pdf2ps ou un autre programme. Cela pourrait aider ...

Hors de curiosité, combien de points êtes-vous traquent? Si vous pouviez donner une idée de la quantité de données que vous utilisez, avec un exemple de code que vous utilisez actuellement, nous pourrions peut-être donner de meilleures idées.


3 commentaires

J'utilise TRACE : SET TERMINAL EPSLATEX Taille 8cm, Colorext de 8cm ColorText; Définir la sortie "tracé.tex"; TRACE "TEMP.DAT" en utilisant 2: 4 W p Titre "" ; où "Temp.dat" est un fichier contenant environ 1'000'000 lignes chacune ayant les données souhaitées dans les deuxième et quatrième colonnes.


Je vois. Je suis d'accord avec la réponse de Raphaël - si vous souhaitez montrer un million de points de données, cela donnera lieu à un énorme dossier, quelle que soit votre si vous utilisez des graphiques vectoriels. Je suggérerais de faire une image de référence haute résolution à la place ou filtrant les données d'une certaine manière, comme avec la commande chaque .


La version actuelle de Développement GNUPLOT a une option Niveau3 pour la borne PostScript et EPSLATEX qui utilise un codage PNG pour les bitmaps intégrés à partir de TRACE ... avec image . Cela peut réduire considérablement la taille de l'image.



4
votes

Ma solution pour ce problème est la commande "TOUTES" dans gnuplot, c'est-à-dire xxx

comme ceci, vous pouvez déjà réduire la taille des graphiques EPS par ~ un facteur de 10. Bien sûr Vous devez vous découvrir combien de données vous pouvez omettre sans perdre trop d'informations, c'est-à-dire que la figure doit toujours contenir toutes les fonctionnalités que vous souhaitez visualiser.

Si cela n'est pas recherché, je convertis normalement le EPS à une image raster de la taille appropriée et de la convertir en EPS. Aussi, vous devez également jouer avec la résolution, etc.


1 commentaires

Merci beaucoup. J'ai essayé cela, cela aide à des étendues, mais le problème est que la taille de la sortie EPS est toujours grande (si j'inclus 5 parcelles de ce type dans mon document de latex, la taille du fichier PDF résultant serait aussi grande que 6 Mo) . Peut-être que je devrais utiliser un facteur de descente plus grand mais suffisamment petit pour conserver les fonctionnalités que je veux exposer.



2
votes

J'ai rencontré un problème similaire dans lequel un tracé de dispersion de plus de 10 ^ 6 points a entraîné des fichiers PDF de> 100 Mo. Les points ont été dessinés avec une très faible opacité (1%), de sorte que de nombreux points en couches seraient visibles du tout, ce qui entraînerait quelque chose de plus d'une distribution de densité lisse plutôt que d'une parcelle de dispersion. Ainsi, j'étais très réticent à suivre les conseils de Raphael Roth et de pointe les données.

Au lieu de cela, j'ai trouvé utile de créer un script gnuplot séparé pour tracer les données à l'aide du terminal Terminal de PnGCAIRO images de résolution suffisante. Cette parcelle n'a aucun axes, pas de tics, pas de bordure ni de marges - juste les données dessinées dans les coordonnées appropriées: xxx

puis, dans la parcelle réelle (pour laquelle je utilisé le terminal cairolatx ), je trace cette image PNG: xxx

Notez que je trace à l'aide de l'autre (Ticless) Ensemble d'axes pour vous assurer que L'image remplit la zone de graphique sans aucune bordure, de sorte que les tics des axes X1Y1 correspondent à la position réelle des points de la parcelle de diffusion.

Le PNG a fini que quelques douzaines de kilo-octets, le PDF était un couple de MB. Je pense que le style de tracé rgbalpha (similaire à avec image ) n'est pas le plus efficace mais c'était assez bon pour moi.

J'espère que quelqu'un trouvera quelqu'un cela utile.


6 commentaires

Voir aussi tex.stackexchange.com/a/131106/33933 pour des tests connexes de mon côté.


@Christoph vous n'arrivez pas à savoir s'il y a une option comme niveau3 pour le terminal Cairolatx ? Ou est-ce la valeur par défaut?


Sur une autre note, quelque chose à conscience est le comportement (malheureux) du moteur PDF d'Apple (ainsi que le visualiseur PDF.JS dans Firefox et (éventuellement?) Chrome) pour appliquer une hausse lissée (interpolation) aux pngs intégrés dessinés < Code> avec image . Pour être clair, je ne veux pas dire l'interpolation (souhaitée) de PM3D mais celui qui ne devrait pas vraiment être là. Cela peut être évité à l'aide de avec des pixels d'image qui redevient les rectangles de traction (entraînant des fichiers volumineux). Voir gnuplot> Aide Image Pixels


Cairolatx n'a pas une telle option AFAIK, de tels détails sont différés au Caire, alors que epslatex est écrit octet-octet par Gnuplot. Vous voudrez peut-être aussi essayer définir la terminal Tikz Externimages , n'ai pas essayé cela par moi-même, pourtant. Le problème d'interpolation se produit-il aussi avec PDF? J'étais conscié que des pseudonymes EPS, voir mes commentaires à Stackoverflow.com/q/25736904/2604213


Oui, cela se produit également avec la sortie PDF. Et ce n'est même pas limité à la prévisualisation.


Très belle réponse, c'est une bien meilleure alternative aux données descendant. NB: La résolution apparente de l'image peut être réglée en modifiant la taille du terminal PNGCAIRO, mais en gardant la taille du terminal Cairolatex (ou EPSLATEX) de la même manière.