¿Cuál es la forma más fácil de crear trazados con calidad de publicación en Linux?

17

Podemos suponer que tenemos un archivo CSV y queremos un diagrama de línea muy básico con varias líneas en un diagrama y una leyenda simple.

Łukasz Lew
fuente
2
¿Cómo define 'calidad de publicación'? Explique qué aspectos le gustaría ver cubiertos ... por ejemplo, uso de color, anchos de línea, etc. ¿Deberían las respuestas centrarse en el tamaño de fuente?
Egon Willighagen

Respuestas:

14

La forma más fácil es usar R

Use read.csvpara ingresar los datos en R, luego use una combinación de los comandos plotyline

Si quieres algo realmente especial, mira las bibliotecas ggplot2 o lattice .

En ggplot2los siguientes comandos debería comenzar.

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)   

Esto te daría la siguiente trama:

Trazado de línea http://img84.imageshack.us/img84/6393/tmpq.jpg

Guardar parcelas en R

Guardar parcelas en R es sencillo:

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

En lugar de jpeg's, también puede guardar como un pdfarchivo o 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
fuente
¿Qué hay de guardar en el archivo?
Łukasz Lew
1
O un poco más sucintamente con melt y qplot:m <- melt(d, id = "x"); qplot(variable, value, data = m, colour = variable)
hadley
En realidad, una forma aún más fácil es usar R + deductor con ggplot2 (hay una nueva versión de esto que está por salir en los próximos meses. Actualmente hay una versión beta disponible)
Tal Galili
44
Buen ejemplo, pero la trama es apenas la calidad de publicación. O al menos ninguna de las revistas en las que publico lo aceptaría.
Matti Pastell
3
"Apenas calidad de publicación" ???? Me doy cuenta de que no es perfecto: la frase "... en caso de que comiences ..." cubre esa parte. Pero con un poco de trabajo adicional, es decir, etiquetas de eje, diría que está bien. Por cierto, ¿en qué publicaciones publicas?
csgillespie
13

Es difícil pasar a R por los gráficos. Podrías hacer lo que quieras en 3 líneas. Por ejemplo, suponiendo que el archivo csv tiene cuatro columnas:

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
fuente
¿Qué tal si lo publicamos?
Łukasz Lew
55
R produce algunos de los gráficos de mejor calidad. Como editor de una revista internacional de investigación, me encantaría que todos nuestros autores usaran R.
Rob Hyndman
1
... vea mi comentario sobre la pregunta ... ¿cómo define 'calidad de publicación' o 'mejor calidad' ... desde la perspectiva del editor?
Egon Willighagen
19
Me gusta ver gráficos vectoriales (sin jpegs), diseño gráfico siguiendo los principios de Tufte y Cleveland, fuentes legibles, leyendas despejadas, sin fondos sombreados, límites de ejes sensibles e intervalos de tics, ejes etiquetados, sin superposición de texto y trazado de caracteres o líneas , etc. La mayoría de los autores utilizan la configuración predeterminada de su software, por lo que un buen software tiene buenos valores predeterminados. Aquí es donde Excel falla miserablemente y R lo hace bastante bien. Pero es posible producir gráficos pésimos en R y buenos gráficos en Excel. Es más fácil producir gráficos de alta calidad en R.
Rob Hyndman
12

R es definitivamente la respuesta. Solo agregaría a lo que Rob y Colin ya dijeron:

Para mejorar la calidad de sus parcelas, debe considerar usar el paquete Cairo para el dispositivo de salida. Eso mejorará en gran medida la calidad de los gráficos finales. Simplemente llame a la función antes de trazar y redirige a El Cairo como dispositivo de salida.

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

Por último, en términos de ponerlo en una publicación, ese es el papel que Sweavejuega. Hace que la combinación de parcelas con su papel sea una operación trivial (y tiene el beneficio adicional de dejarlo con algo que es reproducible y comprensible). Úselo cacheSweavesi tiene cálculos de larga duración.

Shane
fuente
2
Probablemente mejor que usar Cairo para producir una imagen de mapa de bits es guardar gráficos como vectores, que son independientes de la resolución, por lo que se ven mejor cuando se cambia el tamaño y siempre se adaptan a la resolución de impresión: me gusta svg, que se puede editar fácilmente con inkscape .
naught101
10

Mi herramienta favorita es Python con mathplotlib

Las ventajas:

  • Exportación inmediata desde el entorno donde realizo mis experimentos en
  • Soporte para las estructuras de datos scipy / numpy
  • Sintaxis / opciones familiares (fondo matlab)
  • Soporte completo de látex para etiquetas / leyendas, etc. ¡La misma composición que en el resto de su documento!

Específicamente, para diferentes formatos de archivo como svg y eps, use el parámetro de formato de savefig

Un ejemplo: input.csv

"Línea 1", 0,5,0.8,1.0,0.9,0.9
"Línea 2", 0.2,0.7,1.2,1.1,1.1

Código:

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
fuente
¿Podría poner un fragmento de código para completar? Sería muy útil para las personas en el futuro encontrar esta página.
Łukasz Lew
@ Łukasz Hmm, ¿alguna sugerencia sobre cómo cargar una figura svg?
Peter Smit
44
Podría haber mencionado en su respuesta que matplotlib permite la representación de toda la tipografía en la trama con LaTeX para que se integre perfectamente visualmente.
Benjamin Bannier
Me pregunto por qué matplotlib aún no se ha integrado en R.
naught101
6

Eche un vistazo a las galerías de muestra de tres bibliotecas de visualización populares:

Para los dos primeros, incluso puede ver el código fuente asociado: lo simple es simple, no hay muchas líneas de código. El caso prefuso tendrá el código de repetitivo Java requerido. Los tres admiten una serie de backends / dispositivos / renderizadores (pdf, ps, png, etc.). Los tres son claramente capaces de gráficos de alta calidad.

Creo que se reduce a qué idioma te sientes más cómodo trabajando. Ve con eso.

ars
fuente
1

Fácil es relativo. Ninguna herramienta es fácil hasta que sepa cómo usarla. Algunas herramientas pueden parecer más difíciles al principio, pero le brindan un control mucho más detallado una vez que las domina.

Recientemente comencé a hacer mis tramas en pgfplots . Al ser un paquete LaTeX (además de tikz), es particularmente bueno para hacer que las cosas se vean bien. Las fuentes serán consistentes con el resto del documento y es mucho más fácil integrar visualmente sus trazados. No es la opción más fácil de hacer trazados, pero es una forma bastante fácil de hacer trazados que ciertamente son de calidad de publicación.

gerrit
fuente