3月 112013
 

在上两篇中,我们都用到了 plot 命令来作图。如果说 Excel 作图的方法是先按照默认的格式画好之后再让你涂涂改改,那么 R 作图的流程更亲切:铺开一张白纸,打好格,画数据点,画坐标轴,加图例。就像用纸笔画图。不像 Excel 那样自作聪明。每一步都清清楚楚掌控在你手里。

开胃小菜: 在 Rstudio 左下窗口输入代码 demo(persp),然后按回车,再回车,再回车,再回车……

这里,我们接着上一篇读取的数据 pm,来画一些更漂亮的图片。

pm <- read.csv(file = "c:\\R\\data\\dapengde_DummyR_PM25.csv")
plot(x = pm$time, y = pm$h8, xlab = "Time", ylab = "PM2.5", type = "l", ylim = c(0, 
    200))  # 以小时为 x 轴,8 米处的 PM2.5 浓度为 y 轴作图。设定两个坐标的名称。数据点类型为 l 即线型。设定 y 轴范围。
lines(x = pm$time, y = pm$h100, col = "red")  # 添加 100 米处 PM2.5 浓度曲线。
legend(x = 15, y = 180, legend = c("8 m", "100 m"), col = c("black", "red"), 
    lty = 1)  # 添加图例。

plot of chunk unnamed-chunk-1

练习03.1:请用问号查询 plot、lines、legend 的帮助文件。

添加图例的位置有多种设置方法。上面的例子是用坐标位置确定的。还可以用内置模板来指定:

legend("topleft", legend = c("8 m", "100 m"), col = c("red", "black"), lty = 1) # 图例添加在左上角。
legend(locator(1), legend = c("8 m", "100 m"), col = c("red", "black"), lty = 1) # 用鼠标确定图例的位置。

做出的图片出现在 Rtudio 右下窗,可以点击 Export,选择保存的格式和路径就可以了。不过,更经常用的是命令行方式:

pdf(file = "c:\\R\\data\\output.pdf") # 打开一张pdf的白纸。
plot(x = pm$time, y = pm$h8, xlab = "Time", ylab = "PM2.5 at 8 m", type = "l", ylim = c(0, 200)) # 在白纸上画图
dev.off() # 画完了,把纸张收起来

下面,我们让图片复杂一点:

pdf(file = "c:\\R\\data\\output2.pdf", width = 8, height = 5) # 设定纸张大小。
plot(x = pm$time, y = pm$h8, xlab = "Time", ylab = "PM2.5 at 8 m", type = "l", ylim = c(0, 200), axes=FALSE) # 画图,但坐标轴先空着。
axis(2) # 在左边画出 y 轴。
axis(4) # 在右边画出 y 轴。
axis(1, at = 0 : 23, labels = 0 : 23) # 在下面画出x轴,并在指定位置(at)标出刻度(labels)。
points(x = pm$time, y = pm$h100, col = "red", type = "l") # 增加一条线。
points(x = pm$time, y = pm$h325, col = "blue", type = "l") # 再增加一条线。
abline(h = c(10, 15 , 25, 35), col = "grey", lty = 2) # 增加几条水平线(世界卫生组织推荐的健康标准值)。
legend("top", legend = c("8 m", "100 m", "325 m"), col = c("red", "black", "blue"), lty = 1) # 添加图例。
box() # 画出边框。
dev.off()

散点图以外的图,用其他的命令,例如:

boxplot(pm[, c("h8", "h100", "h325")], ylim = c(0, 150))
abline(h = c(10, 15, 25, 35), col = "grey", lty = 2)

plot of chunk unnamed-chunk-2

练习03.1:请给上面boxplot做的图添加图例,并保存为pdf。

R 的作图功能超级强大,看看这里有很多例子,包含了源代码。

有用的信息:

作图 plot(), boxplot()
图上添加数据点和线 points(), lines(), abline(), box(), axis()
添加图例 legend()
保存图片 pdf()

连载中,待续

 

 

  30 Responses to “R 菜鸟入门篇 第03篇 画图”

  1. 很好狠好 通俗易懂 文字流畅 应该拉你当统计之都的写手

    • 欢迎常来,好评是多多益善啊!我是统计学的门外汉一个,这些文字是写给外行看的,只怕会贻笑大方。

  2. 写得很流畅,读起来一气呵成,不像有的书,中间参杂了其他的东西,容易断思路。赞一个

  3. pdf(file = “c:\\R\\data\output.pdf”) # 打开一张pdf的白纸。

    data后面应该是两个斜杠吧?

  4. 发现一个问题,输出的pdf文件,用福昕阅读器好像看不出颜色的区别,用百度阅读器可以看到

  5. 【求助】
    感谢楼主啊,我也是统计的门外汉,在用呢的入门学习R
    遇到下面这个问题,请教如何解决?

    > pdf(file = “c:\\R\\data\\output.pdf”)
    错误于pdf(file = “c:\\R\\data\\output.pdf”) :
    无法打开’c:\R\data\output.pdf’文件

  6. 哈哈,就是这样的,好白的一个问题啊。。。感谢高人!

  7. 说得好详细,很有用!R的书里没有这么具体的用法。支持大鹏~

  8. Great, easy to understand. I should read it earlier

  9. 才发现这篇博,感觉很有用~~~谢谢博主~~~学习R两个月了,在各种搜集资料中~~~是不是可以下此博文系列的PDF文件呢?

  10. 博主文章中有点小错误:
    pdf(file = “c:\R\data\output.pdf”
    应该为:
    pdf(file = “c:\R\data\output.pdf”

  11. 学习一下

  12. 请问你的美元符号怎样打出来的?我用英文半角打出来它老说”invalid”

  13. 为什么在plot(x,y)里面输入type=“1”,R 不执行任务呢,画出来的不是线,而是空心点,我是不是哪里出错了。。。。。

  14. plot(x=pm$time,y=pm$h8,xlab=”time”,ylab=”PM2.5″,type=”1″,ylim = c(0,200))

    Error in plot.xy(xy, type, …) : invalid plot type ‘1’

    请问这是什么原因,不得其解啊。。。

  15. R作图功能强大那的链接打不开了呢,大鹏博主能更新下吗?

  16. 偶尔看到老师教程,十分棒的新手教程。最近在做3D散点图,用的是R的rgl包,因为可以旋转角度从不同方向观察,还可以做动态图,但是遇到了一个小问题,默认参数作图,做出的图形坐标轴刻度线朝外,并且很长,感觉不是很美观,想修改下坐标轴刻度线,但是试过了“tck”和“tcl”,似乎都不起作用,是因为rgl包的原因,还是3D作图的原因?在论坛也请教了,没人回应,不知道老师能不能帮忙解答下?十分感谢。

 填写评论

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(必填)

(必填)