سؤال

لدي ملف مفصول بفواصل اسمه 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) كيف يمكنني رسم العمود الأول (المحور السيني) مقابل العمود الثاني (المحور الصادي)؟أحاول هذا (من القراءة هذا الموقع):

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

هل لديك أي فكرة عما أفعله خطأ؟أ بحث سريع في جوجل يكشف عن شخص آخر لديه نفس المشكلة ولكن لا توجد إجابة ذات صلة.تحديث:اتضح أنه يعمل بشكل جيد إذا تخطيت بياني المهمة في المنتصف.أي فكرة لماذا يحدث هذا؟

السؤال الثاني يأتي بسهولة بعد السؤال الأول:

2) كيف يمكنني رسم العمود الأول (المحور السيني) مقابل جميع الأعمدة الأخرى على المحور الصادي؟أفترض أن الأمر سهل جدًا بمجرد أن أتغلب على المشكلة الأولى التي أواجهها، لكنني جديد بعض الشيء على لغة 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)

ونهج واحد لالتآمر الأعمدة الأخرى من البيانات على المحور الصادي:

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، ولكن إذا كنت تريد رسم على نطاق ومقابل كل الأعمدة الأخرى في مؤامرة واحدة وسهلة ومع بعض الأناقة :) للطباعة أو العرض، يمكنك استخدام حزم البروفيسور هادلي ويكهام في 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)، وضبط محور، تعيين خيارات الفردية لكل خط الخ.

الوثائق عبر الإنترنت .

وأنا بعيدة كل البعد عن أن يكون خبيرا 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 );

وجرب هذا:

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)

وهناك طريقة بسيطة-ص بالتآمر عليه:

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

وباستخدام هذا السيناريو، عليك أن تكتب:

r -cdps, -k1:2 foo.csv

لتحصل على المؤامرة التي تريدها. وضعه في وضع مطول (الخامس) لرؤية النصي R المقابلة.

data <- read.table(...)
plot(data$scale,data$serial)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top