Qual é a maneira mais fácil de criar gráficos com qualidade de publicação no Linux?


17

Podemos assumir que temos um arquivo CSV e queremos um gráfico de linhas muito básico com várias linhas em um gráfico e uma legenda simples.


2
Como você define 'qualidade da publicação'? Por favor, elabore quais aspectos você gostaria de ver cobertos ... por exemplo, uso de cores, larguras de linhas, etc. As respostas devem se concentrar no tamanho da fonte?
Egon Willighagen

Respostas:


14

A maneira mais fácil é usar o R

Use read.csvpara inserir os dados em R e, em seguida, use uma combinação dos comandos ploteline

Se você quiser algo realmente especial, consulte as bibliotecas ggplot2 ou lattice .

Nos ggplot2seguintes comandos, você deve começar.

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)   

Isso daria o seguinte gráfico:

Gráfico de linha http://img84.imageshack.us/img84/6393/tmpq.jpg

Salvando parcelas em R

Salvar gráficos em R é simples:

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

Em vez de jpegvocê também pode salvar como um pdfarquivo ou 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()

Que tal salvar em um arquivo?
Łukasz Lew

1
Ou um pouco mais sucintamente com derretimento e qplot:m <- melt(d, id = "x"); qplot(variable, value, data = m, colour = variable)
Hadley

Na verdade, uma forma ainda mais fácil é usar R + dedutor com ggplot2 (há uma nova versão deste que está prestes a sair nos próximos meses Um beta está disponível.)
Tal Galili

4
Belo exemplo, mas a trama dificilmente é de qualidade de publicação. Ou pelo menos nenhum dos periódicos em que eu publico aceitaria.
precisa

3
"Dificilmente qualidade de publicação" ???? Sei que não é perfeito - a frase "... você deve começar ..." cobre esse trecho. Mas com um pouco de trabalho adicional, ou seja, rótulos de eixos, eu diria que está bem. BTW, em quais periódicos você publica?
csgillespie

13

É difícil passar do R para gráficos. Você pode fazer o que quiser em 3 linhas. Por exemplo, supondo que o arquivo csv tenha quatro colunas:

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)

Que tal publicá-lo?
Łukasz Lew

5
R produz alguns dos gráficos de melhor qualidade disponíveis. Como editor de uma revista internacional de pesquisa, eu adoraria todos os nossos autores de usar R.
Rob Hyndman

1
.. veja meu comentário sobre a pergunta ... como você define "qualidade da publicação" ou "melhor qualidade" ... da perspectiva do editor?
Egon Willighagen

19
Eu gosto de ver gráficos vetoriais (sem jpegs), design gráfico seguindo os princípios da Tufte & Cleveland, fontes legíveis, legendas organizadas, sem fundos sombreados, limites de eixos sensíveis e intervalos de escala, eixos rotulados, sem sobreposição de texto e caracteres ou linhas de plotagem , etc. A maioria dos autores usa as configurações padrão de seu software, portanto, um bom software tem bons padrões. É aqui que o Excel falha miseravelmente e R se sai muito bem. Mas é possível produzir gráficos ruins em R e bons gráficos no Excel. É apenas mais fácil de produzir gráficos de alta qualidade em R.
Rob Hyndman

12

R é definitivamente a resposta. Gostaria apenas de acrescentar ao que Rob e Colin já disseram:

Para melhorar a qualidade de seus gráficos, considere usar o pacote Cairo para o dispositivo de saída. Isso melhorará muito a qualidade dos gráficos finais. Você simplesmente chama a função antes de plotar e ela redireciona para o Cairo como o dispositivo de saída.

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 fim, em termos de publicação em uma publicação, esse é o papel que Sweavedesempenha. Isso torna a combinação de gráficos com o seu papel uma operação trivial (e tem o benefício adicional de deixar você com algo que seja reproduzível e compreensível). Use cacheSweavese você tiver cálculos de longa duração.


2
Provavelmente, melhor do que usar o Cairo para produzir uma imagem de bitmap é salvar gráficos como vetores, que são independentes de resolução, para ter uma aparência melhor quando redimensionada e sempre adequada à resolução de impressão - eu gosto de svg, que pode ser facilmente editado com o inkscape .
precisa saber é o seguinte

10

Minha ferramenta favorita é Python com mathplotlib

As vantagens:

  • Exportação imediata do ambiente em que faço minhas experiências em
  • Suporte para estruturas de dados scipy / numpy
  • Sintaxe / opções familiares (segundo plano do matlab)
  • Suporte completo de látex para etiquetas / legendas, etc. Portanto, a mesma composição tipográfica do restante do documento!

Especificamente, para diferentes formatos de arquivo, como svg e eps, use o parâmetro format de savefig

Um exemplo: input.csv

"Linha 1", 0,5,0,8,1,0,0,9,0,9
"Linha 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')

Você poderia colocar um snippet de código para completar? Seria muito útil para as pessoas que encontrarem esta página no futuro.
Łukasz Lew

@ Hukasz Hmm, alguma sugestão de como enviar uma figura svg?
22810 Peter Smit

4
Você poderia ter mencionado em sua resposta que o matplotlib permite a renderização de toda tipografia no gráfico com o LaTeX, para que se integre perfeitamente visualmente.
Benjamin Bannier

Gostaria de saber por que o matplotlib ainda não foi integrado ao R?
precisa saber é o seguinte

6

Dê uma olhada nas galerias de amostra para três bibliotecas de visualização populares:

Nos dois primeiros, você pode até visualizar o código-fonte associado - o simples é simples, não há muitas linhas de código. O caso do prefuse terá o código padrão do Java necessário. Todos os três suportam vários back-ends / dispositivos / renderizadores (pdf, ps, png, etc). Todos os três são claramente capazes de gráficos de alta qualidade.

Eu acho que tudo se resume a qual idioma você está mais confortável trabalhando. Vá com isso.



1

Fácil é relativo. Nenhuma ferramenta é fácil até você saber como usá-la. Algumas ferramentas podem parecer mais difíceis no começo, mas fornecem um controle muito mais refinado depois que você as domina.

Recentemente, comecei a fazer minhas plotagens em pgfplots . Sendo um pacote LaTeX (em cima tikz), é particularmente bom em fazer as coisas parecerem boas. As fontes serão consistentes com o restante do documento e é muito mais fácil integrar seus gráficos visualmente. Não é a opção mais fácil de criar gráficos, mas é uma maneira bastante fácil de criar gráficos com qualidade de publicação.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.