Какой самый простой способ создания графиков качества публикации под Linux?

17

Мы можем предположить, что у нас есть файл CSV, и нам нужен очень простой линейный график с несколькими линиями на одном графике и простой легендой.

Лукаш Лью
источник
2
Как вы определяете «качество публикации»? Пожалуйста, опишите, какие аспекты вы хотели бы видеть покрытыми ... например, использование цвета, ширину линии и т. Д. Следует ли вместо этого сосредоточить ответы на размере шрифта?
Egon Willighagen

Ответы:

14

Самый простой способ - использовать R

Используйте read.csvдля ввода данных в R, а затем использовать комбинацию из plotи lineкоманд

Если вы хотите что-то действительно особенное, то посмотрите на библиотеки ggplot2 или решетку .

В ggplot2следующих командах вы должны начать.

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)   

Это даст вам следующий сюжет:

Линейный сюжет http://img84.imageshack.us/img84/6393/tmpq.jpg

Сохранение участков в R

Сохранение графиков в R просто:

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

Вместо jpeg's' вы также можете сохранить как pdfфайл или постскриптум:

#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
источник
Как насчет сохранения в файл?
Лукаш Лью
1
Или чуть более кратко с melt и qplot:m <- melt(d, id = "x"); qplot(variable, value, data = m, colour = variable)
хадли
На самом деле, еще более простой способ - использовать R + deducer с ggplot2 (есть новый релиз, который скоро выйдет в ближайшие несколько месяцев. В настоящее время доступна бета)
Tal Galili
4
Хороший пример, но сюжет едва ли качественен. Или, по крайней мере, ни один из журналов, в которых я публикуюсь, не примет это.
Матти Пастелл
3
"Вряд ли качество публикации" ???? Я понимаю, что это не идеально - фраза "... если ты начнешь .." охватывает этот бит. Но с небольшой дополнительной работой, то есть надписью оси, я бы сказал, что все в порядке. Кстати, в каких журналах вы публикуете?
csgillespie
13

Трудно пройти R для графики. Вы можете делать что хотите в 3 строки. Например, предположим, что файл CSV имеет четыре столбца:

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)
Роб Хиндман
источник
Как насчет размещения в публикации?
Лукаш Лью
5
R производит одни из самых качественных графических изображений. Как редактор международного исследовательского журнала, я хотел бы, чтобы все наши авторы использовали R.
Роб Хиндман
1
... см. мой комментарий к вопросу ... как вы определяете «качество публикации» или «наилучшее качество» ... с точки зрения редактора?
Egon Willighagen
19
Мне нравится видеть векторную графику (без jpegs), графический дизайн в соответствии с принципами Tufte & Cleveland, удобочитаемые шрифты, незагроможденные легенды, отсутствие затененных фонов, разумные пределы осей и интервалы между галочками, помеченные оси, отсутствие наложения текста и нанесение символов или линий и т. д. Большинство авторов используют настройки своего программного обеспечения по умолчанию, поэтому хорошее программное обеспечение имеет хорошие значения по умолчанию. Это где Excel терпит неудачу с треском, и R делает довольно хорошо. Но есть возможность создавать паршивые графики в R и хорошие графики в Excel. Просто проще производить высококачественную графику в R.
Роб Хиндман
12

R, безусловно, ответ. Я бы просто добавил к тому, что Роб и Колин уже сказали:

Для того, чтобы улучшить качество ваших участков, вы должны рассмотреть возможность использования в Каирском пакете для устройства вывода. Это значительно улучшит качество конечной графики. Вы просто вызываете функцию перед построением графика, и она перенаправляется в Каир в качестве устройства вывода.

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

И наконец, с точки зрения публикации в публикации, это та роль, которую Sweaveиграет. Это делает объединение графиков с вашей бумагой тривиальной операцией (и дает дополнительное преимущество, предоставляя вам что-то воспроизводимое и понятное). Используйте, cacheSweaveесли у вас есть длительные вычисления.

Шейн
источник
2
Вероятно, лучше, чем использовать Cairo для создания растрового изображения, это сохранить графики в виде векторов, которые не зависят от разрешения, поэтому выглядят лучше при изменении размера и всегда соответствуют разрешению печати - мне нравится svg, который можно легко отредактировать с помощью inkscape .
naught101
10

Мой любимый инструмент это Python с mathplotlib

Преимущества:

  • Немедленный экспорт из среды, где я делаю свои эксперименты в
  • Поддержка структур данных scipy / numpy
  • Знакомый синтаксис / опции (фон Matlab)
  • Полная поддержка латекса для надписей / легенд и т. Д. Так же, как и в остальной части вашего документа!

В частности, для разных форматов файлов, таких как svg и eps, используйте параметр format в savefig

Пример: input.csv

«Линия 1», 0,5,0,8,1,0,0,9,0,9
«Линия 2», 0,2,0,7,1.2,1.1,1.1

Код:

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')
Питер Смит
источник
Не могли бы вы поставить фрагмент кода для полноты? Было бы очень полезно для людей в будущем найти эту страницу.
Лукаш Лью
@ Łukasz Хм, какое-нибудь предложение, как загрузить фигуру svg?
Питер Смит
4
Вы могли бы упомянуть в своем ответе, что matplotlib позволяет отображать всю типографику на графике с помощью LaTeX, поэтому он прекрасно интегрируется визуально.
Бенджамин Банье
Интересно, почему matplotlib еще не интегрирован в R?
naught101
6

Взгляните на примеры галерей для трех популярных библиотек визуализации:

Для первых двух вы можете даже просмотреть связанный исходный код - все просто, не много строк кода. В префузе будет необходимый шаблонный Java-код. Все три поддерживают несколько backends / devices / renderers (pdf, ps, png и т. Д.). Все трое явно способны на качественную графику.

Я думаю, что все сводится к тому, на каком языке вам удобнее всего работать.

АРС
источник
1

Легко относительно. Ни один инструмент не прост, пока вы не знаете, как его использовать. Поначалу некоторые инструменты могут показаться более сложными, но, как только вы овладеете ими, вы получите гораздо более детальный контроль.

Я недавно начал делать свои графики в pgfplots . Будучи пакетом LaTeX (сверху tikz), он особенно хорош для того, чтобы все выглядело хорошо. Шрифты будут соответствовать остальной части документа, и визуально интегрировать ваши графики будет намного проще. Это не самый простой способ создания графиков, но это довольно простой способ создания графиков, которые безусловно имеют качество публикации.

Геррит
источник