Qual è il modo più semplice per creare grafici di qualità di pubblicazione su Linux?


17

Possiamo presumere che abbiamo un file CSV e vogliamo un diagramma a linee molto semplice con diverse linee su un diagramma e una semplice legenda.


2
Come si definisce la "qualità della pubblicazione"? Ti preghiamo di approfondire quali aspetti ti piacerebbe vedere coperti ... ad esempio l'uso del colore, la larghezza delle linee, ecc. Le risposte dovrebbero concentrarsi invece sulla dimensione del carattere?
Egon Willighagen,

Risposte:


14

Il modo più semplice è usare R

Utilizzare read.csvper inserire i dati in R, quindi utilizzare una combinazione dei comandi ploteline

Se vuoi qualcosa di veramente speciale, dai un'occhiata alle librerie ggplot2 o reticolo .

Nei ggplot2seguenti comandi dovrebbe iniziare.

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)   

Questo ti darebbe la seguente trama:

Trama lineare http://img84.imageshack.us/img84/6393/tmpq.jpg

Salvataggio di grafici in R

Il salvataggio dei grafici in R è semplice:

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

Invece di jpegpuoi anche salvare come pdffile 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()

Che ne dici di salvare su un file?
Łukasz Lew,

1
O un po 'più succintamente con melt e qplot:m <- melt(d, id = "x"); qplot(variable, value, data = m, colour = variable)
hadley,

In realtà, un modo ancora più semplice è usare il detrattore R + con ggplot2 (c'è una nuova versione di questo che sta per uscire nei prossimi mesi. Una beta è attualmente disponibile)
Tal Galili

4
Un bell'esempio, ma la trama non è di qualità di pubblicazione. O almeno nessuna delle riviste in cui ho pubblicato lo accetterebbe.
Matti Pastell,

3
"Difficilmente qualità della pubblicazione" ???? Mi rendo conto che non è perfetto - la frase "... dovresti iniziare ..." copre quel po '. Ma con un po 'di lavoro aggiuntivo, vale a dire le etichette degli assi, direi che va bene. A proposito, in quali riviste pubblichi?
csgillespie,

13

È difficile superare R per la grafica. Puoi fare quello che vuoi in 3 righe. Ad esempio, supponendo che il file CSV abbia quattro colonne:

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)

Che ne dici di metterlo in pubblicazione?
Łukasz Lew,

5
R produce alcuni dei migliori grafici di qualità in circolazione. Come editore di una rivista di ricerca internazionale, vorrei che tutti i nostri autori
usassero

1
.. vedi il mio commento sulla domanda ... come definisci "qualità della pubblicazione" o "migliore qualità" ... dal punto di vista dell'editor?
Egon Willighagen,

19
Mi piace vedere la grafica vettoriale (senza jpeg), la progettazione grafica secondo i principi di Tufte & Cleveland, caratteri leggibili, legende ordinate, senza sfondi sfumati, limiti degli assi sensibili e intervalli di tick, assi etichettati, nessuna sovrapposizione di testo e trama di caratteri o linee , ecc. La maggior parte degli autori utilizza le impostazioni predefinite del proprio software, quindi un buon software ha buone impostazioni predefinite. È qui che Excel fallisce miseramente e R fa abbastanza bene. Ma è possibile produrre grafici scadenti in R e buoni grafici in Excel. È più semplice produrre grafica di alta qualità in R.
Rob Hyndman,

12

R è sicuramente la risposta. Vorrei solo aggiungere ciò che Rob e Colin hanno già detto:

Per migliorare la qualità dei tuoi grafici, dovresti prendere in considerazione l'utilizzo del pacchetto Cairo per il dispositivo di output. Ciò migliorerà notevolmente la qualità della grafica finale. È sufficiente chiamare la funzione prima di tracciare e reindirizza al Cairo come dispositivo di output.

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

Infine, in termini di metterlo in una pubblicazione, questo è il ruolo che Sweavegioca. Rende la combinazione di grafici con la tua carta un'operazione banale (e ha l'ulteriore vantaggio di lasciarti con qualcosa di riproducibile e comprensibile). Utilizzare cacheSweavese si dispone di calcoli di lunga durata.


2
Probabilmente meglio che usare Cairo per produrre un'immagine bitmap è salvare grafici come vettori, che sono indipendenti dalla risoluzione, quindi sembrano migliori quando vengono ridimensionati e si adattano sempre alla risoluzione di stampa - Mi piace svg, che può essere facilmente modificato con inkscape .
nought101

10

Il mio strumento preferito è Python con mathplotlib

I vantaggi:

  • Esportazione immediata dall'ambiente in cui eseguo i miei esperimenti
  • Supporto per le strutture dati scipy / numpy
  • Sintassi / opzioni familiari (sfondo matlab)
  • Supporto completo in lattice per etichette / legende, ecc. Così come la composizione del resto del documento!

In particolare, per diversi formati di file come svg ed eps, utilizzare il parametro format di savefig

Un esempio: input.csv

"Linea 1", 0,5,0,8,1,0,0,9,0,9
"Riga 2", 0.2,0.7,1.2,1.1,1.1

Codice:

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')

Potresti mettere uno snippet di codice per completezza? Sarebbe molto utile per le persone in futuro trovare questa pagina.
Łukasz Lew,

@ Łukasz Hmm, qualche suggerimento su come caricare una figura in formato svg?
Peter Smit,

4
Avresti potuto menzionare nella tua risposta che matplotlib consente il rendering di tutta la tipografia nella trama con LaTeX, quindi si integra perfettamente visivamente.
Benjamin Bannier,

Mi chiedo perché matplotlib non sia ancora stato integrato in R?
naught101

6

Dai un'occhiata alle gallerie di esempio per tre librerie di visualizzazione popolari:

Per i primi due, puoi persino visualizzare il codice sorgente associato: le cose semplici sono semplici, non molte righe di codice. Il caso prefuse avrà il codice di caldaiaplate Java richiesto. Tutti e tre supportano una serie di backend / dispositivi / renderer (pdf, ps, png, ecc.). Tutti e tre sono chiaramente in grado di offrire grafica di alta qualità.

Penso che praticamente si riduca a quale lingua ti trovi più a tuo agio nel lavorare. Vai con quello.



1

Facile è relativo. Nessuno strumento è facile fino a quando non sai come usarlo. All'inizio alcuni strumenti possono sembrare più difficili, ma ti offrono un controllo molto più preciso una volta acquisiti il ​​controllo.

Di recente ho iniziato a creare i miei grafici in pgfplots . Essendo un pacchetto LaTeX (sopra tikz), è particolarmente bravo a rendere le cose belle. I caratteri saranno coerenti con il resto del documento ed è molto più facile integrare visivamente le trame. Non è l'opzione più semplice per creare grafici, ma è un modo piuttosto semplice per creare grafici di qualità pubblicitaria.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.