Подтвердить что ты не робот

Построение простых данных в R

У меня есть файл с разделителями-запятыми с именем foo.csv, содержащий следующие данные:

scale, serial, spawn, for, worker
5, 0.000178, 0.000288, 0.000292, 0.000300
10, 0.156986, 0.297926, 0.064509, 0.066297
12, 2.658998, 6.059502, 0.912733, 0.923606
15, 188.023411, 719.463264, 164.111459, 161.687982

У меня есть два вопроса:

1) Как построить первый столбец (ось x) по сравнению со вторым столбцом (ось y)? Я пытаюсь это сделать (от чтения этого сайта):

data <- read.table("foo.csv", header=T,sep=",")
attach(data)
scale <- data[1]
serial <- data[2]
plot(scale,serial)

Но я верну эту ошибку:

Error in stripchart.default(x1, ...) : invalid plotting method

Любая идея, что я делаю неправильно? A быстрый поиск Google показывает кого-то другого с той же проблемой, но нет соответствующего ответа. UPDATE: Оказывается, он отлично работает, если я пропускаю два оператора присваивания в середине. Любая идея, почему это?

Второй вопрос довольно легко после первого:

2) Как создать первый столбец (по оси x) по сравнению со всеми остальными столбцами по оси y? Я предполагаю, что это довольно легко, когда я обойдусь первой проблемой, с которой я столкнулся, но я немного новичок в R, поэтому я все еще обнимаю ее вокруг.

4b9b3361

Ответ 1

Вам не нужны две строки:

scale <- data[1]
serial <- data[2]

поскольку масштаб и последовательность уже установлены из заголовков в read.table.

Также scale <- data[1] создает элемент из data.frame

  data[1]
1     5
2    10
3    12
4    15

тогда как scale из read.table является вектором

5 10 12 15

и функция plot(scale, serial) ожидает вектор, а не data.frame, поэтому вам просто нужно сделать

plot(scale, serial)

Один подход к построению других столбцов данных по оси y:

plot(scale,serial, ylab="")
par(new=TRUE) 
plot(scale,spawn,axes=F, ylab="", type="b")
par(new=TRUE) 
plot(scale,for., axes=F, ylab="", type="b")
par(new=TRUE) 
plot(scale,worker,axes=F, ylab="", type="b")

Есть, вероятно, лучшие способы сделать это, но это не соответствует моим текущим знаниям R.

Ответ 2

В вашем примере

plot(scale, serial) 

не будет работать, потому что scale и serial являются обоими кадрами данных, например

class(scale)
[1] "data.frame"

Вы можете попробовать следующее и использовать points() после создания графика для построения остальных столбцов. Обратите внимание: я использовал параметр ylim в plot для размещения диапазона в третьем столбце.

data <- read.csv('foo.csv', header=T)
plot(data$scale, data$serial, ylim=c(0,750))
points(data$scale, data$spawn, col='red')
points(data$scale, data$for., col='green')
points(data$scale, data$worker, col='blue')

Ответ 3

Я новичок в R, но если вы хотите нарисовать масштаб по сравнению с другими колонками на одном сюжете, легко и с некоторой элегантностью:) для печати или презентации, вы можете использовать пакеты Hadley Wickham ggplot2 и изменить их.

Установка:

install.packages("ggplot2",dep=T)
install.packages("reshape",dep=T)

Рисунок вашего примера:

library(ggplot2)
library(reshape)

#read data
data = read.table("foo.csv", header=T,sep=",")

#melt data "scale vs. all"
data2=melt(data,id=c("scale"))
data2

   scale variable      value
1      5   serial   0.000178
2     10   serial   0.156986
3     12   serial   2.658998
4     15   serial 188.023411
5      5    spawn   0.000288
6     10    spawn   0.297926
7     12    spawn   6.059502
8     15    spawn 719.463264
9      5     for.   0.000292
10    10     for.   0.064509
11    12     for.   0.912733
12    15     for. 164.111459
13     5   worker   0.000300
14    10   worker   0.066297
15    12   worker   0.923606
16    15   worker 161.687982

#draw all variables at once as line with different linetypes
qplot(scale,value,data=data2,geom="line",linetype=variable)

Вы также можете использовать точки (geom="points"), выбирать разные цвета или фигуры для разных точек переменных (colours=variable or shape=variable), настраивать ось, устанавливать индивидуальные параметры для каждой строки и т.д.

Ссылка на онлайн-документация.

Ответ 4

Я далек от того, чтобы быть экспертом R, но я думаю, что вам нужен data.frame:

plot(data.frame(data[1],data[2]))

Он, по крайней мере, рисует что-то на моей настройке R!

Следуя советам в ответ luapyad, я придумал это. Я переименовал заголовок "шкала":

scaling, serial, spawn, for, worker
5, 0.000178, 0.000288, 0.000292, 0.000300
10, 0.156986, 0.297926, 0.064509, 0.066297
12, 2.658998, 6.059502, 0.912733, 0.923606
15, 188.023411, 719.463264, 164.111459, 161.687982

то

foo <- read.table("foo.csv", header=T,sep=",")
attach(foo)
plot( scaling, serial );

Ответ 5

Попробуйте следующее:

data <- read.csv('foo.csv')
plot(serial ~ scale, data)
dev.new()
plot(spawn ~ scale, data)
dev.new()
plot(for. ~ scale, data)
dev.new()
plot(worker ~ scale, data)

Ответ 6

Существует простой способ его построения:

https://code.google.com/p/simple-r/

Используя этот script, вам просто нужно ввести:

r -cdps, -k1:2 foo.csv

Чтобы получить сюжет, который вы хотите. Поместите его в подробный режим (-v), чтобы увидеть соответствующий R script.

Ответ 7

data <- read.table(...)
plot(data$scale,data$serial)