Ми можемо припустити, що у нас є файл CSV, і ми хочемо дуже базовий графік рядка з декількома рядками на одному сюжеті та простою легендою.
Ми можемо припустити, що у нас є файл CSV, і ми хочемо дуже базовий графік рядка з декількома рядками на одному сюжеті та простою легендою.
Відповіді:
Найпростіший спосіб - використовувати 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 просто:
#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()
m <- melt(d, id = "x"); qplot(variable, value, data = m, colour = variable)
Важко пройти повз 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)
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
якщо у вас є тривалі обчислення.
Мій улюблений інструмент - Python з mathplotlib
Переваги:
Зокрема, для різних форматів файлів, таких як svg та eps, використовуйте параметр формату 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')
Ознайомтеся з галереями зразків для трьох популярних бібліотек візуалізації:
Для перших двох ви навіть можете переглянути пов’язаний вихідний код - простий матеріал простий, не багато рядків коду. У корпусі попереднього запобіжника буде вказаний необхідний код котла Java. Усі три підтримують ряд програм / пристроїв / рендерів (pdf, ps, png тощо). Усі три чітко здатні до високоякісної графіки.
Я думаю, що це значною мірою зводиться до того, на якій мові ви найбільше комфортно працюєте. Перейдіть з цим.
Ще один варіант - Gnuplot
Легко відносно. Жоден інструмент не простий, поки ви не знаєте, як ним користуватися. Деякі інструменти спочатку можуть здатися складнішими, але надають вам набагато більш тонкий контроль, як тільки ви їх освоїте.
Нещодавно я почав робити свої сюжети в pgfplots . Будучи пакетом LaTeX (на вершині tikz
), він особливо гарний у тому, щоб речі виглядали добре. Шрифти будуть відповідати решті документа, і значно простіше інтегрувати свої сюжети візуально. Це не найпростіший варіант створення сюжетів, але це досить простий спосіб зробити сюжети, які, безумовно, мають якість публікації.