Построение простых данных в R - PullRequest
19 голосов
/ 18 мая 2009

У меня есть разделенный запятыми файл с именем 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 показывает кого-то еще с той же проблемой, но без соответствующего ответа. ОБНОВЛЕНИЕ: Оказывается, это работает нормально, если я пропущу два оператора присваивания в середине. Есть идеи, почему это так?

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

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

Ответы [ 7 ]

12 голосов
/ 18 мая 2009

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

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 ...

7 голосов
/ 22 июля 2009

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

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')
5 голосов
/ 14 июня 2009

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

Установка:

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), настраивать ось, устанавливать индивидуальные параметры для каждой линии и т. Д.

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

2 голосов
/ 18 мая 2009

Попробуйте это:

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)
2 голосов
/ 18 мая 2009

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

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

По крайней мере, что-то наносится на мою настройку R!

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

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 );
0 голосов
/ 02 ноября 2013
data <- read.table(...)
plot(data$scale,data$serial)
0 голосов
/ 01 октября 2013

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

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

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

r -cdps, -k1:2 foo.csv

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...