Вопрос

У меня есть файл, разделенный запятыми, с именем 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, поэтому я все еще обдумываю это.

Это было полезно?

Решение

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

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

Другие советы

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

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')

Я новичок в R, но если вы хотите нарисовать масштаб по сравнениювсе остальные столбцы на одном графике, легко и с некоторой элегантностью :) для печати или презентации вы можете использовать Prof.Пакеты Хэдли Уикхема 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), отрегулируйте ось, установите индивидуальные параметры для каждой линии и т.д.

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

Я далек от того, чтобы быть экспертом по 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 );

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

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)

Существует простой способ построения графика-r:

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

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

r -cdps, -k1:2 foo.csv

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

data <- read.table(...)
plot(data$scale,data$serial)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top