Was ist der einfachste Weg, um Plots in Publikationsqualität unter Linux zu erstellen?

17

Wir können davon ausgehen, dass wir eine CSV-Datei haben und ein sehr einfaches Liniendiagramm mit mehreren Linien auf einem Plot und einer einfachen Legende wollen.

Łukasz Lew
quelle
2
Wie definieren Sie "Publikationsqualität"? Bitte erläutern Sie, welche Aspekte abgedeckt werden sollen ... z. B. Verwendung von Farben, Linienbreiten usw. Sollten sich die Antworten stattdessen auf die Schriftgröße konzentrieren?
Egon Willighagen

Antworten:

14

Am einfachsten ist es, R zu verwenden

Verwenden Sie read.csv, um die Daten in R einzugeben, und verwenden Sie dann eine Kombination der Befehle plotundline

Wenn Sie etwas ganz Besonderes wollen, schauen Sie sich die Bibliotheken ggplot2 oder lattice an .

In ggplot2den folgenden Befehlen sollten Sie loslegen.

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)   

Dies würde Ihnen das folgende Diagramm geben:

Liniendiagramm http://img84.imageshack.us/img84/6393/tmpq.jpg

Speichern von Grundstücken in R

Das Speichern von Plots in R ist einfach:

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

Anstelle von jpeg's können Sie auch eine pdfoder eine Postscript-Datei speichern:

#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
quelle
Wie wäre es mit Speichern in Datei?
Łukasz Lew
1
Oder etwas prägnanter mit Schmelze und Qplot:m <- melt(d, id = "x"); qplot(variable, value, data = m, colour = variable)
Hadley
Noch einfacher ist es, R + deducer mit ggplot2 zu verwenden (es gibt eine neue Version, die in den nächsten Monaten erscheinen wird. Derzeit ist eine Beta verfügbar)
Tal Galili
4
Schönes Beispiel, aber die Handlung ist kaum Publikationsqualität. Oder zumindest keine der Zeitschriften, in denen ich veröffentliche, würde dies akzeptieren.
Matti Pastell
3
"Kaum Publikationsqualität" ???? Mir ist klar, dass es nicht perfekt ist - der Satz "... sollten Sie anfangen ..." deckt dieses Stück ab. Aber mit ein wenig zusätzlicher Arbeit, dh Achsenbeschriftungen, würde ich sagen, dass es in Ordnung ist. Übrigens, in welchen Zeitschriften veröffentlichen Sie?
Csgillespie
13

Es ist schwierig, R für Grafiken zu übertreffen. Sie können in 3 Zeilen tun, was Sie wollen. Angenommen, die CSV-Datei enthält vier Spalten:

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
quelle
Wie wäre es mit einer Veröffentlichung?
Łukasz Lew
5
R produziert einige der besten Qualitätsgrafiken. Als Herausgeber eines internationalen Forschungsjournals würde ich es begrüßen, wenn alle unsere Autoren R.
Rob Hyndman
1
.. siehe mein Kommentar zu der Frage ... wie definieren Sie "Publikationsqualität" oder "beste Qualität" ... aus Sicht des Herausgebers?
Egon Willighagen
19
Ich mag Vektorgrafiken (keine JPEGs), grafisches Design nach den Prinzipien von Tufte & Cleveland, lesbare Schriftarten, aufgeräumte Legenden, keine schattierten Hintergründe, sinnvolle Achsengrenzen und Teilstriche, beschriftete Achsen, keine Überlappung von Text und Zeichnen von Zeichen oder Linien usw. Die meisten Autoren verwenden die Standardeinstellungen ihrer Software. Gute Software hat also gute Standardeinstellungen. Dies ist, wo Excel kläglich versagt und R ziemlich gut tut. Es ist jedoch möglich, schlechte Grafiken in R und gute Grafiken in Excel zu erstellen. Es ist einfach einfacher, hochwertige Grafiken in R.
Rob Hyndman
12

R ist definitiv die Antwort. Ich möchte nur hinzufügen, was Rob und Colin bereits gesagt haben:

Um die Qualität Ihrer Plots zu verbessern, sollten Sie in Betracht ziehen, das Cairo- Paket für das Ausgabegerät zu verwenden. Dadurch wird die Qualität der endgültigen Grafiken erheblich verbessert . Sie rufen die Funktion einfach vor dem Plotten auf und sie wird als Ausgabegerät nach Kairo umgeleitet.

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

In Bezug auf die Veröffentlichung spielt diese Rolle eine entscheidende Rolle Sweave. Das Kombinieren von Plots mit Ihrem Papier ist ein trivialer Vorgang (und hat den zusätzlichen Vorteil, dass Sie etwas erhalten, das reproduzierbar und verständlich ist). Verwenden cacheSweaveSie diese Option, wenn Sie langwierige Berechnungen haben.

Shane
quelle
2
Wahrscheinlich besser als in Kairo, um ein Bitmap-Bild zu erstellen, ist es, Diagramme als Vektoren zu speichern, die unabhängig von der Auflösung sind, also besser aussehen, wenn die Größe geändert wird, und immer der Druckauflösung entsprechen - ich mag svg, das mit inkscape leicht bearbeitet werden kann .
Naught101
10

Mein Lieblingswerkzeug ist Python mit mathplotlib

Die Vorteile:

  • Sofortiger Export aus der Umgebung, in der ich meine Experimente durchführe
  • Unterstützung für die Scipy / Numpy-Datenstrukturen
  • Vertraute Syntax / Optionen (Matlab-Hintergrund)
  • Volle Latexunterstützung für Etiketten / Legenden etc. Also gleicher Satz wie im Rest Ihres Dokuments!

Verwenden Sie für verschiedene Dateiformate wie svg und eps den Formatparameter von savefig

Ein Beispiel: input.csv

"Zeile 1", 0,5,0,8,1,0,0,9,0,9
"Zeile 2", 0,2,0,7,1,2,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
quelle
Könnten Sie einen Code-Schnipsel für die Vollständigkeit setzen? Es wäre sehr nützlich, wenn die Leute in Zukunft diese Seite finden würden.
Łukasz Lew
@ Łukasz Hmm, ein Vorschlag, wie man eine SVG-Figur hochlädt?
Peter Smit
4
Sie hätten in Ihrer Antwort erwähnen können, dass matplotlib das Rendern aller Typografien im Plot mit LaTeX ermöglicht, so dass es sich perfekt visuell integrieren lässt.
Benjamin Bannier
Ich frage mich, warum matplotlib noch nicht in R integriert wurde.
Naught101
6

In den Beispielgalerien finden Sie drei beliebte Visualisierungsbibliotheken:

In den ersten beiden Fällen können Sie sogar den zugehörigen Quellcode anzeigen - das Einfache ist einfach, nicht viele Codezeilen. Der Prefuse-Fall verfügt über den erforderlichen Java-Boilerplate-Code. Alle drei unterstützen eine Reihe von Backends / Geräten / Renderern (pdf, ps, png usw.). Alle drei sind eindeutig in der Lage, qualitativ hochwertige Grafiken zu erstellen.

Ich denke, es kommt so ziemlich darauf an, in welcher Sprache Sie sich am wohlsten fühlen.

ars
quelle
5

Eine andere Option ist Gnuplot

babelproofreader
quelle
1

Einfach ist relativ. Kein Werkzeug ist einfach, bis Sie wissen, wie man es benutzt. Einige Werkzeuge mögen auf den ersten Blick schwieriger erscheinen, bieten Ihnen jedoch eine viel feinere Kontrolle, sobald Sie sie beherrschen.

Ich habe vor kurzem begonnen, meine Pläne in pgfplots zu machen . Als LaTeX-Paket (zusätzlich tikz) ist es besonders gut darin, Dinge gut aussehen zu lassen. Die Schriftarten stimmen mit dem Rest des Dokuments überein und es ist viel einfacher, Ihre Diagramme visuell zu integrieren. Es ist nicht die einfachste Möglichkeit, Plots zu erstellen, aber es ist eine ziemlich einfache Möglichkeit, Plots zu erstellen, die mit Sicherheit die Qualität einer Veröffentlichung haben.

Gerrit
quelle