Jaki jest najłatwiejszy sposób tworzenia działek o jakości publikacji w systemie Linux?

17

Możemy założyć, że mamy plik CSV i chcemy bardzo prostego wykresu linii z kilkoma liniami na jednym wykresie i prostej legendy.

Łukasz Lew
źródło
2
Jak definiujesz „jakość publikacji”? Proszę wyjaśnić, jakie aspekty chcielibyście zobaczyć ... np. Użycie koloru, szerokość linii itp. Czy odpowiedzi powinny skupiać się na rozmiarze czcionki?
Egon Willighagen,

Odpowiedzi:

14

Najłatwiejszym sposobem jest użycie R.

Użyj, read.csvaby wprowadzić dane do R, a następnie użyj kombinacji poleceń plotiline

Jeśli chcesz coś naprawdę specjalnego, a następnie szukać w bibliotekach ggplot2 lub kraty .

W ggplot2poniższych poleceniach powinieneś zacząć.

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)   

To dałoby ci następujący wątek:

Wykres liniowy http://img84.imageshack.us/img84/6393/tmpq.jpg

Zapisywanie wykresów w R.

Zapisywanie wykresów w R jest proste:

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

Zamiast nich jpegmożesz również zapisać jako plik pdflub 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
źródło
Co powiesz na zapisanie do pliku?
Łukasz Lew
1
Lub nieco bardziej zwięźle z melt i qplot:m <- melt(d, id = "x"); qplot(variable, value, data = m, colour = variable)
hadley
W rzeczywistości jeszcze łatwiejszym sposobem jest użycie deduktora R + z ggplot2 (pojawi się nowe wydanie tego, które ukaże się w ciągu najbliższych kilku miesięcy. Wersja beta jest obecnie dostępna)
Tal Galili
4
Fajny przykład, ale fabuła nie jest jakością publikacji. A przynajmniej żaden z czasopism, w których publikuję, nie zaakceptuje tego.
Matti Pastell
3
„Trudna jakość publikacji” ???? Zdaję sobie sprawę, że to nie jest idealne - obejmuje to zdanie „... na początek…”. Ale przy odrobinie dodatkowej pracy, tj. Etykietach osi, powiedziałbym, że jest w porządku. BTW, w jakich czasopismach publikujesz?
csgillespie
13

Grafika jest trudna do przejścia poza R. Możesz zrobić, co chcesz w 3 liniach. Na przykład zakładając, że plik csv ma ​​cztery kolumny:

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
źródło
Co powiesz na umieszczenie go w publikacji?
Łukasz Lew
5
R produkuje jedne z najlepszych dostępnych grafik. Jako redaktor międzynarodowego czasopisma badawczego chciałbym, aby wszyscy nasi autorzy używali R.
Rob Hyndman
1
.. zobacz mój komentarz do pytania ... jak definiujesz „jakość publikacji” lub „najlepszą jakość” ... z perspektywy redaktora?
Egon Willighagen,
19
Lubię widzieć grafikę wektorową (bez plików JPEG), projektowanie graficzne zgodne z zasadami Tufte & Cleveland, czytelne czcionki, uporządkowane legendy, bez zacienionych teł, rozsądne ograniczenia osi i interwały zaznaczania, oznaczone osie, brak nakładania się tekstu i kreślenie znaków lub linii itp. Większość autorów korzysta z domyślnych ustawień swojego oprogramowania, więc dobre oprogramowanie ma dobre ustawienia domyślne. To tutaj Excel nieszczęśliwie zawodzi, a R ma się całkiem nieźle. Ale możliwe jest tworzenie kiepskich wykresów w R i dobrych wykresów w Excelu. Po prostu łatwiej jest tworzyć wysokiej jakości grafikę w R.
Rob Hyndman,
12

R jest zdecydowanie odpowiedzią. Chciałbym tylko dodać do tego, co już powiedzieli Rob i Colin:

Aby poprawić jakość swoich działek, należy rozważyć użycie w Cairo pakiet dla urządzenia wyjściowego. To znacznie poprawi jakość końcowej grafiki. Po prostu wywołujesz funkcję przed wydrukowaniem, a przekierowuje ona do Kairu jako urządzenia wyjściowego.

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

Wreszcie, jeśli chodzi o umieszczenie go w publikacji, to jest rola, którą Sweaveodgrywa. To sprawia, że ​​łączenie wykresów z papierem jest banalną operacją (i ma tę dodatkową zaletę, że pozostawia cię z czymś, co jest powtarzalne i zrozumiałe). Użyj, cacheSweavejeśli masz długotrwałe obliczenia.

Shane
źródło
2
Prawdopodobnie lepszym rozwiązaniem niż używanie Kairu do tworzenia obrazu bitmapowego jest zapisywanie wykresów jako wektorów, które są niezależne od rozdzielczości, więc wyglądają lepiej po zmianie rozmiaru i zawsze pasują do rozdzielczości wydruku - lubię svg, który można łatwo edytować za pomocą programu inkscape .
naught101 20.04.2012
10

Moje ulubione narzędzie to Python z mathplotlib

Zalety:

  • Natychmiastowy eksport ze środowiska, w którym przeprowadzam eksperymenty
  • Obsługa struktur danych scipy / numpy
  • Znajoma składnia / opcje (tło Matlaba)
  • Pełna obsługa lateksów dla etykiet / legend itp. Tak samo składanie jak w pozostałej części dokumentu!

W szczególności w przypadku różnych formatów plików, takich jak svg i eps, użyj parametru formatu savefig

Przykład: input.csv

„Linia 1”, 0,5,0,8,1,0,0,09,0
„Linia 2”, 0,2,0,7,7,1,2,1,1,1,1

Kod:

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
źródło
Czy możesz umieścić fragment kodu dla kompletności? Przydałoby się to w przyszłości osobom znajdującym tę stronę.
Łukasz Lew
@ Łukasz Hmm, jakieś sugestie jak wgrać postać svg?
Peter Smit,
4
W swojej odpowiedzi mógłbyś wspomnieć, że matplotlib pozwala na renderowanie całej typografii na wykresie za pomocą LaTeX, dzięki czemu doskonale integruje się wizualnie.
Benjamin Bannier
Zastanawiam się, dlaczego matplotlib nie został jeszcze zintegrowany z R?
naught101 20.04.2012
6

Spójrz na przykładowe galerie dla trzech popularnych bibliotek wizualizacji:

W przypadku pierwszych dwóch możesz nawet wyświetlić powiązany kod źródłowy - proste rzeczy są proste, niewiele wierszy kodu. Przypadek prefuse będzie miał wymagany kod wzorcowy Java. Wszystkie trzy obsługują wiele backendów / urządzeń / rendererów (pdf, ps, png itp.). Wszystkie trzy mają wyraźnie wysoką jakość grafiki.

Myślę, że sprowadza się to do tego, w którym języku najlepiej czujesz się w pracy. Idź z tym.

ars
źródło
5

Inną opcją jest Gnuplot

czytnik babelproofreader
źródło
1

Łatwe jest względne. Żadne narzędzie nie jest łatwe, dopóki nie wiesz, jak go używać. Niektóre narzędzia mogą początkowo wydawać się trudniejsze, ale po opanowaniu zapewniają znacznie bardziej szczegółową kontrolę.

Ostatnio zacząłem tworzyć moje wykresy w pgfplots . Będąc pakietem LaTeX (na górze tikz), jest szczególnie dobry w poprawianiu wyglądu. Czcionki będą spójne z resztą dokumentu i znacznie łatwiej zintegrować swoje wykresy wizualnie. Nie jest to najłatwiejsza opcja tworzenia wykresów, ale jest to dość łatwy sposób na tworzenie wykresów, które z pewnością mają jakość publikacji.

gerrit
źródło