• R语言
  • 请问如何用ggplot画出曲线簇?

如果用 ggplot2, 可以用 stat_function 把生成数据这一步抽象掉。

library(ggplot2)
out <- ggplot(data.frame(x = c(0, 10)), aes(x))
for (i in 1:4) {
  out = out + stat_function(fun = function(.x ,z) z/.x, 
                            color = i, 
                            args = list(z=i),
                            xlim=c(i/10,10) )
}
out

我以前画图用TikZ 或 Mathematica。 刚用 R 时,觉得画函数图像还得先“生成数据”这一步很奇怪,画出来的图不是“矢量图”。后来才发现 TikZ 不过是把“生成数据”这一步抽象掉了。

Update: 之前犯了两个错误 (i) 循环变量应该在 args 里,(ii) x得从 z/10开始,因为要求 y 在0到10取值。很奇怪 stat_function 没有 ylim 这个参数。dapengde 我给你那个 bookdown 项目交了 PR.

    yihui 我在学校的几年,基本把图书馆关于 R 的书,浏览了个遍,比较全面细致地去教人如何画图的几乎没有,它们看起来都是镜面反射,没有一点新意,唯独对《“古”代统计图形》抱有很大期待,相比于其它书籍,这本书的优势是追根溯源,用词考究,关于 Base R 的特别全面,这对于那些要往期刊上发文章的,是特别好的作图参考材料,特别好的参数查询手册,近些年,关于 Base R 的另外一本好书是 Thomas Rahlf 的 《Data Visualisation with R》相应的网站 <http://www.datavisualisation-r.com/>,别的就没见着了

    我本想把多年沤在书签和硬盘里的东西整理出来,其实有段时间也确实在整理,见 RGraphics,后来又想到这对于当下的我,可能不是重点,就没继续整理,而且我也没有在统计图形里深入研究过,不太可能写的比谢大还好,目前它变成了个分类器,除了数据处理、 ggplot2 和案例,也没多少兴趣继续,索性搁置了!

    最近,我买了两本中文技术书,一本是《统计学习方法》第二版,一本是《深度学习》中译本,前者是自己一个人在写,后者是开源在 Github 上,一大群人在翻译。蹭热度没什么不好,但是为了赶时间降低质量就不能理解了,最讨厌写书也走敏捷开发的路子,带坏风气,如果一个人时间精力不够,质量把控不过来,就号召一群人来把控呀,我觉得这两本书在质量上现在形成鲜明的对比。我是那种不喜欢追时髦的人,特别是技术书和教材,我偏向于沉淀下来的经典著作(这一点是我导师带给我的影响,研究生阶段主要在啃十余年以前的专著,所以我看到书里的用词,就特别去思考,实在忍不住就在票圈里吐槽)。

    最后,总结一下,写书追求完美没什么不好,总比误人子弟好!如果精力不够就开源出来,一群人的眼睛盯着质量总比一个人赶工期好的多!谢大的书是不出版,放个样张也造福大众,绝对是个异数。

      yihui
      于是出版社少了一本神作,江湖上多了一个传说。

      浏览了一遍,内容(对统计图形的介绍)和文笔都是上品,能潜心看下去的读者定会受益匪浅。只是在哥哥作图如日中天的现在,基础 R 图形代码可能对一些人来说略“不合时宜”。

      3.7 图例首句有个别字。

        Cloud2016 好,我尽快抽空开源出来,但我的源文档是 LyX 写的。你四个月前的回帖我还放在我的浏览器里没关:https://d.cosx.org/d/420476/26 就等着你们把它转成 bookdown 了,估计有不少技术难点。

        Liechi 时隔这么久,我自己都不敢看了。文风里有不少稚气和卖弄的成分,而且内容上我怕我看了会无限挑刺。

          1 个月 后
          5 天 后

          Cloud2016 最近没有时间做这个事情,虽然我很想看到古代图形统计早日重见天日。我对用 github 工作很不熟悉,所以在开始搬砖前需要从一些比较基本的东西学起,但是最近没有精力去折腾 github。

          你可以发个帖子召唤点忍者来帮忙。如果我对要做的事情上手些了,也会来搭把手。

            Cloud2016 好的,我加入。谢谢邀请!

            有三个问题或建议:

            1. 这个项目的目标,是不是只需把书稿从 lyx 格式迁移到 bookdown 格式,一字不改,而后续的修订全是 @yihui 的工作?
            2. 我觉得事先分一下工比较好,免得两个人或几个人不约而同做了同一件事,一磨叽,冲突了。
            3. lyx 我几乎没用过,如果有任何迁移的经验,哪怕是最基础的,希望分享一下,避免时间上不必要的浪费。

            Liechi 我觉得不必对 git 望而生畏,也没必要事先专门系统学习。边用边学效果好,以赛代练效率高。你可以拿 TNT 擂台赛练手,打碎不用你赔。

              yihui 你想怎么折腾就怎么折腾吧。我感觉这会是严酷的体力活儿。

              dapengde 根据谢大的指示,我觉得我们有相当大的自主权,

              1. 首先尽量搬迁,如果有难以重现的可以暂不搬迁,在相关地方注明即可,我希望能在 R Markdown 中运行的就在里面运行,比如生成图形和模型计算,如果有耗时长的操作,可以不运行,贴结果
              2. 要不我来序言、第1、3、5、7章,附录 A、C,你来2、4、6章,附录 B、D,如果有人加入,再从你我的章节中各分一些给他
              3. 首先下载安装 LyX 我选了就近的站点 <https://mirrors.tuna.tsinghua.edu.cn/lyx/bin/2.3.3/> 下载,然后用它打开 Modern-Stat-Graphics.lyx 或者依据 Modern-Stat-Graphics.tex 文件复制文字(我没找到更方便的转化方式),把文字复制出来后,再在相应的地方以 R Markdown 的方式把 R 代码块和图片插入
              4. 我已经加你为项目合作者,你要接受一下,然后可以直接推动修改到仓库了
              5. 由代码自动生成的图片,暂不调长宽比等格式,首先尽量把内容复现就好
              6. 参考文献和章节的引用可以暂时不搞,先解决图、表的交叉引用

                dapengde
                以赛代练是好主意,只是开始的阻力较大,我对 git 的了解,仅限于用它推过文章;用它做别的事情,感觉无从着手。你知道有什么材料适于新手学习吗?

                  Liechi dapengde fork commit push merge 会这些基本就够了。如果再遇到什么其它的操作可以参考这个查询手册 <https://github.com/521xueweihan/git-tips> 然后就是放狗搜,最后就是拿出来问,比如我以前问的 <https://d.cosx.org/d/420426>

                  Liechi 如果真的那么惧怕 Git 不妨先 fork 这个项目,然后在自己 fork 的项目里修改, RStudio 里提交 commit,推送到 Github 后,手动提交 PR。大多数情况下,我也是在 RStudio 里弄

                    Cloud2016

                    好的。可以在 readme 里列个任务分配表,把正在做的标识出来,剩下的任人认领。这个表我可以做。

                    你的邀请邮件我收到了,然而点了之后进去的不是 /invitations 页面,所以没法接受邀请。

                      dapengde 看来这个是我单方面决定的,从设置里可以看到,你已经在合作者列表里了

                      好啊,你来加任务分配表

                        Cloud2016

                        然后用它打开 Modern-Stat-Graphics.lyx 或者依据 Modern-Stat-Graphics.tex 文件复制文字(我没找到更方便的转化方式),把文字复制出来后,再在相应的地方以 R Markdown 的方式把 R 代码块和图片插入。

                        我用了一个稍微省事的办法:先用 pandoc 把 tex 文件转成 markdown,再把后者拷贝粘贴进 .Rmd文件。

                        pandoc 转换全书的话出错。我就只转了第 2 章,尚可。只是代码部分全丢失了,需要从 lyx 文件里手动拷贝粘贴。不过这样也有好处,就是顺便把 sweave 的图片选项也拷进了 .Rmd 的 chunk 选项里,最大程度保持跟原稿的一致。