注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

widebright的个人空间

// 编程和生活

 
 
 

日志

 
 

试了一下R语言的绘图功能,感觉没有gnuplot用起来方便啊  

2013-11-18 23:57:49|  分类: 程序设计 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

0. 安装

===========

到R语言官方主页下载windows版的Base安装包,我安装的是R-3.0.2-win.exe


1. 查看帮助

============

自带好几个帮助手册,入门手册,数据导入导出等。自己点help 菜单manual查看。

?getwd  可以查看各个命令的帮助



2. 切换工作目录

===============

> getwd()

[1] "C:/Users/bright/Documents"

> setwd ("D:/gnuplot绘图")

> getwd()

[1] "D:/gnuplot绘图"







3. 数据导入导出

===============

参考自带 R introduction Manual “Reading data from files”一章

参考自带 R Data Import/Export的pdf手册



从文本文件导入数据:


文件编码

read.table("file.dat", fileEncoding="latin1")

read.table("intro.dat", fileEncoding = "UTF-8")


默认的分隔符是空格或者制表符,下面指定为使用逗号 

read.table("testfile", sep = ",")


文件头

read.table("file.dat", header = TRUE, row.names = 1)

col.names参数可以覆盖文件里面header line

输入?read.table  查看一下帮助说明。


            dist climb time

Greenmantle 2.5 650 16.083

...    


如果典型的文件格式是像上面这样的,那么个dist climb time 对应的header ,也就是col.names

Greenmantle 自动被当作 row.names 。 当然也可以指定  row.names 为第一列。

R 语言会自动解析文件头。比如看到第一行只有3个域,后面都有4个,就会把第一行的当作文件头了。第一列当作row name。



我有以前的gnuplot数据是这样

gy_interface_initial.txt

---------------------

360 14

380 15

400 16

415 18

433 20

447 24

455 31

480 44

490 120

500 300

515 650

516 1400

------------------------

没带表头的数据,试着把它读进来吧

> read.table("gy_interface_initial.txt")

    V1   V2

1  360   14

2  380   15

3  400   16

4  415   18

5  433   20

6  447   24

7  455   31

8  480   44

9  490  120

10 500  300

11 515  650

12 516 1400

默认column name是使用V1 V2这样的。下面尝试给他指定一个


> read.table("gy_interface_initial.txt", col.names=c('reqs_per_secs',"response_time"))

   reqs_per_secs response_time

1            360            14

2            380            15

3            400            16

4            415            18

5            433            20

6            447            24

7            455            31

8            480            44

9            490           120

10           500           300

11           515           650

12           516          1400


上面的c函数(concatenate 的缩写)从scalar或者vector 创建一个vector



把它赋值给一个变量

> initial <- read.table("gy_interface_initial.txt", col.names=c('reqs_per_secs',"response_time"))

> initial

   reqs_per_secs response_time

1            360            14

2            380            15

3            400            16

4            415            18

5            433            20

6            447            24

7            455            31

8            480            44

9            490           120

10           500           300

11           515           650

12           516          1400


导入进来的数据格式叫做一个 "data frame"

http://data.princeton.edu/R/readingData.html#3.1


查看data frame里面的某一列

> initial$response_time

 [1]   14   15   16   18   20   24   31   44  120  300  650 1400



编辑数据

弹出一个界面让你编辑数据

> xnew <- edit(initial)

删除xnew这object

> rm(xnew)


弹出一个界面让你录入数据:

xnew <- edit(data.frame())


不过这个界面真是不会用啊,只能加不能删除




发现网上有这个文章体不错的。

--------------

R的简单教程

http://data.princeton.edu/R/gettingStarted.html#2.1


Advanced R programming

http://adv-r.had.co.nz/

-------------------------





read.csv 和read.delim 函数是对read.table函数的封装,用来导入csv文件之类的更方便吧。

read.table又是对scan函数的封装,直接使用scan函数估计更加麻烦



导出数据到文本文件使用 write.table




4.  绘图

=========

参考自带 R introduction Manual “12 Graphical procedures”一章

参考 R Graphs Cookbook.pdf 一书



plot(initial$response_time~initial$reqs_per_secs)

试了一下R语言的绘图功能,感觉没有gnuplot用起来方便啊 - widebright - widebright的个人空间

 


试试更多参数

plot(initial$response_time~initial$reqs_per_secs, # y~x

type="o", #Specify type of plot as l for line

main="diameter消息响应时间曲线", # Plot Title

xlab="每秒requst个数", #X axis title

ylab="响应时间 (毫秒)", #Y axis title

xlim=c(0,550), #Set x axis limits from 0 to 30

ylim=c(0,1500), #Set y axis limits from 0 to 140

xaxs="i", #Set x axis style as internal

yaxs="i", #Set y axis style as internal

col="red", #Set the color of plotting symbol to red

pch=1) #Set the plotting symbol to filled dots

试了一下R语言的绘图功能,感觉没有gnuplot用起来方便啊 - widebright - widebright的个人空间

 

在菜单里面可以选择保存成图片文件,pdf文件等。

试了一下R语言的绘图功能,感觉没有gnuplot用起来方便啊 - widebright - widebright的个人空间

 


平滑曲线,想把上面的直线画成平滑一点的。

plot(initial$response_time~initial$reqs_per_secs, # y~x

main="diameter消息响应时间曲线", # Plot Title

xlab="每秒requst个数", #X axis title

ylab="响应时间 (毫秒)", #Y axis title

xlim=c(0,550), #Set x axis limits from 0 to 30

ylim=c(0,1500), #Set y axis limits from 0 to 140

xaxs="i", #Set x axis style as internal

yaxs="i", #Set y axis style as internal

col="red", #Set the color of plotting symbol to red

pch=1) #Set the plotting symbol to filled dots

smooth = smooth.spline(initial$reqs_per_secs, initial$response_time, df=10, spar=0.01)

lines(smooth, col="green", lwd=2)

试了一下R语言的绘图功能,感觉没有gnuplot用起来方便啊 - widebright - widebright的个人空间

 


     但好像没有什么方便的参数,grid.bezier  说是可以画 bezier曲线 ,但使用起来非常麻烦。  看上去,你还要把4个控制点一个个的发给他。网上有用某些算法来根据数据点算出曲线方程,然后绘图的。但也很麻烦,不应是合适的。没有一个想gnuplot那样方便的参数。

    ?R语言的强大可能在于它的统计计算,数据分析,数学计算方面。单纯就普通绘图来说plot函数没有nuplot的功能方便,很多参数需要统计学或者数学方面的知识,我这种菜鸟实在掌控不了。GUI界面也没有gnuplot那样可以放大缩小的功能。想用数据点画个平滑曲线都是很麻烦的。画图我还是用gnuplot好了。R Graphs Cookbook.pdf 一书还提到很多图形,但由于前面平滑曲线弄不好,我都懒得继续试下去了,R可能不适合我这种菜鸟,呵呵。





  评论这张
 
阅读(856)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017