Quelle est la façon la plus simple de créer des tracés de qualité publication sous Linux?

17

Nous pouvons supposer que nous avons un fichier CSV et nous voulons un tracé de ligne très basique avec plusieurs lignes sur un tracé et une légende simple.

Łukasz Lew
la source
2
Comment définissez-vous la «qualité de publication»? Veuillez préciser quels aspects vous aimeriez voir traités ... par exemple, l'utilisation des couleurs, les largeurs de ligne, etc. Les réponses devraient-elles plutôt se concentrer sur la taille de la police?
Egon Willighagen

Réponses:

14

La façon la plus simple est d'utiliser R

Utilisez read.csvpour entrer les données dans R, puis utilisez une combinaison des commandes plotetline

Si vous voulez quelque chose de vraiment spécial, alors regardez les bibliothèques ggplot2 ou lattice .

Dans ggplot2les commandes suivantes, vous devriez commencer.

require(ggplot2)
#You would use read.csv here
N = 10
d = data.frame(x=1:N,y1=runif(N),y2=rnorm(N), y3 = rnorm(N, 0.5))
p = ggplot(d)

p = p+geom_line(aes(x, y1, colour="Type 1"))
p = p+geom_line(aes(x, y2, colour="Type 2"))
p = p+geom_line(aes(x, y3, colour="Type 3"))
#Add points
p = p+geom_point(aes(x, y3, colour="Type 3"))
print(p)   

Cela vous donnerait l'intrigue suivante:

Tracé de ligne http://img84.imageshack.us/img84/6393/tmpq.jpg

Enregistrement des parcelles dans R

Enregistrer des tracés dans R est simple:

#Look at ?jpeg to other different saving options
jpeg("figure.jpg")
print(p)#for ggplot2 graphics
dev.off()

Au lieu de jpeg, vous pouvez également enregistrer en tant que pdffichier PostScript:

#This example uses R base graphics
#Just change to print(p) for ggplot2
pdf("figure.pdf")
plot(d$x,y1, type="l")
lines(d$x, y2)
dev.off()
csgillespie
la source
Que diriez-vous d'enregistrer dans un fichier?
Łukasz Lew
1
Ou un peu plus succinctement avec melt et qplot:m <- melt(d, id = "x"); qplot(variable, value, data = m, colour = variable)
hadley
En fait, un moyen encore plus simple consiste à utiliser le déducteur R + avec ggplot2 (une nouvelle version de celui-ci est sur le point de sortir dans les prochains mois. Une version bêta est actuellement disponible)
Tal Galili
4
Bel exemple, mais l'intrigue n'est guère de qualité de publication. Ou du moins aucune des revues dans lesquelles je publie ne l'accepterait.
Matti Pastell
3
"Qualité de publication à peine" ???? Je me rends compte que ce n'est pas parfait - l'expression "... si vous vous lancez .." couvre ce morceau. Mais avec un peu de travail supplémentaire, c'est-à-dire des étiquettes d'axe, je dirais que ça va. BTW, dans quelles revues publiez-vous?
csgillespie
13

Il est difficile de dépasser R pour les graphiques. Vous pouvez faire ce que vous voulez en 3 lignes. Par exemple, en supposant que le fichier csv comporte quatre colonnes:

x <- read.csv("file.csv")
matplot(x[,1],x[,2:4],type="l",col=1:3)
legend("topleft",legend=c("A","B","C"),lty=1,col=1:3)
Rob Hyndman
la source
Que diriez-vous de le mettre en publication?
Łukasz Lew
5
R produit certains des meilleurs graphismes de qualité. En tant que rédacteur en chef d'une revue de recherche internationale, j'aimerais que tous nos auteurs utilisent R.
Rob Hyndman
1
.. voir mon commentaire sur la question ... comment définissez-vous «qualité de publication» ou «meilleure qualité» ... du point de vue d'un éditeur?
Egon Willighagen
19
J'aime voir des graphiques vectoriels (pas de jpeg), une conception graphique suivant les principes de Tufte & Cleveland, des polices lisibles, des légendes épurées, aucun arrière-plan ombré, des limites d'axe sensibles et des intervalles de tick, des axes étiquetés, aucun chevauchement de texte et des caractères ou des lignes de traçage , etc. La plupart des auteurs utilisent les paramètres par défaut de leur logiciel, donc un bon logiciel a de bonnes valeurs par défaut. C'est là qu'Excel échoue lamentablement et R s'en sort plutôt bien. Mais il est possible de produire des graphes pourris en R et de bons graphes dans Excel. Il est juste plus facile de produire des graphiques de haute qualité dans R.
Rob Hyndman
12

R est certainement la réponse. Je voudrais simplement ajouter à ce que Rob et Colin ont déjà dit:

Pour améliorer la qualité de vos tracés, vous devriez envisager d'utiliser le package Cairo pour le périphérique de sortie. Cela améliorera considérablement la qualité des graphiques finaux. Vous appelez simplement la fonction avant de tracer et elle redirige vers Le Caire en tant que périphérique de sortie.

Cairo(600, 600, file="plot.png", type="png", bg="white")
plot(rnorm(4000),rnorm(4000),col="#ff000018",pch=19,cex=2) # semi-transparent red
dev.off() # creates a file "plot.png" with the above plot

Enfin, en termes de publication dans une publication, c'est le rôle qui Sweavejoue. Cela rend la combinaison de tracés avec votre papier une opération triviale (et a l'avantage supplémentaire de vous laisser avec quelque chose de reproductible et compréhensible). À utiliser cacheSweavesi vous avez des calculs de longue durée.

Shane
la source
2
L'enregistrement des graphiques en tant que vecteurs, indépendamment de la résolution, est probablement mieux que d'utiliser Cairo pour produire une image bitmap.Ainsi , regardez mieux lorsqu'il est redimensionné et adaptez toujours la résolution d'impression - j'aime le svg, qui peut facilement être modifié avec inkscape .
naught101
10

Mon outil préféré est Python avec mathplotlib

Les avantages:

  • Exportation immédiate depuis l'environnement où je fais mes expériences en
  • Prise en charge des structures de données scipy / numpy
  • Syntaxe / options familières (fond matlab)
  • Prise en charge complète du latex pour les étiquettes / légendes, etc. Donc, même composition que dans le reste de votre document!

Plus précisément, pour différents formats de fichiers comme svg et eps, utilisez le paramètre format de savefig

Un exemple: input.csv

"Ligne 1", 0,5,0,8,1,0,0,9,0,9
"Ligne 2", 0,2,0,7,1,2,1,1,1,1

Code:

import csv
import matplotlib.pyplot as plt

legends = []
for row in csv.reader(open('input.csv')):
    legends.append(row[0])
    plt.plot(row[1:])

plt.legend(legends)
plt.savefig("out.svg", format='svg')
Peter Smit
la source
Pourriez-vous mettre un extrait de code pour être complet? Il serait très utile pour les personnes à l'avenir de trouver cette page.
Łukasz Lew
@ Łukasz Hmm, quelques suggestions sur la façon de télécharger une figure svg?
Peter Smit
4
Vous auriez pu mentionner dans votre réponse que matplotlib permet le rendu de toute la typographie dans l'intrigue avec LaTeX afin qu'il s'intègre parfaitement visuellement.
Benjamin Bannier
Je me demande pourquoi matplotlib n'a pas encore été intégré dans R?
naught101
6

Jetez un œil aux exemples de galeries pour trois bibliothèques de visualisation populaires:

Pour les deux premiers, vous pouvez même afficher le code source associé - le truc simple est simple, pas beaucoup de lignes de code. Le cas préfuse aura le code passe-partout Java requis. Les trois prennent en charge un certain nombre de backends / périphériques / moteurs de rendu (pdf, ps, png, etc.). Les trois sont clairement capables de graphismes de haute qualité.

Je pense que cela se résume à peu près à la langue dans laquelle vous êtes le plus à l'aise de travailler. Allez-y.

ars
la source
5

Une autre option est Gnuplot

babelproofreader
la source
1

La facilité est relative. Aucun outil n'est facile tant que vous ne savez pas comment l'utiliser. Certains outils peuvent sembler plus difficiles au début, mais vous offrent un contrôle beaucoup plus fin une fois que vous les maîtrisez.

J'ai récemment commencé à faire mes tracés dans pgfplots . Étant un package LaTeX (en plus tikz), il est particulièrement bon pour rendre les choses belles. Les polices seront cohérentes avec le reste du document et il est beaucoup plus facile d'intégrer visuellement vos tracés. Ce n'est pas l'option la plus simple pour faire des tracés, mais c'est un moyen assez facile de faire des tracés qui sont certainement de qualité publication.

gerrit
la source