R 菜鸟入门篇 第03篇 画图

在上两篇中,我们都用到了 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()

连载中,待续

 

 

R 菜鸟入门篇 第03篇 画图》上有29条评论

    1. dapeng 文章作者

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

      回复
  1. 卡卡

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

    回复
  2. 卡卡

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

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

    回复
    1. dapeng 文章作者

      是的,的确应该是两个斜杠,不知怎么写丢了。谢谢指正!已在原文上修订。

      回复
  3. 卡卡

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

    回复
    1. dapeng 文章作者

      这倒是奇怪了,pdf 在不同的阅读器中还有颜色区别?我用 acrobat 看是没有问题的啊。

      回复
  4. 单子

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

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

    回复
  5. 单子

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

    回复
  6. 小语妈

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

    回复
  7. 王居珊珊

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

    回复
  8. 正思维

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

    回复
    1. 大鹏 文章作者

      阁下说得极是,少了个斜线。谢谢指正!已修改。

      回复
  9. 旦旦爱甜食

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

    回复
  10. luosu

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

    回复
  11. luosu

    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’

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

    回复
      1. 大鹏 文章作者

        祝贺!每干掉一个小怪兽,体能就升了一次级。

        回复
  12. dashan

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

    回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注

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