• 新鲜事R语言
  • 诚邀广大R语言、数据可视化爱好者和我们一起搬迁升级谢益辉著作《现代统计图形》

Liechi 我注意到你 Fork 的是大鹏的库

你应该直接 Fork 我的库,修改内容后,往分支 first-edition-update 推送 PR。这个分支用来接收第一版的更新,我也是 Git 操作还不太熟,所以另开这么一个分支,免得把 master 主分支搞崩了!

P.S.
master 主分支我暂时不想修改,每积累一点量稳定后更新一次,前两天我又猛推了不少更新到主分支,现在我要克制自己,不然太浪费时间了,也搞的我精疲力尽

    dapengde 我刚看了下你的极乐净土版现代统计图形,我注意到你在使用 BT 之前的分栏方式对比展示 Base R 和 ggplot2 绘制的图形,我建议你使用 cowplot 包来安排,我想会方便很多,详情请见 <https://github.com/XiangyunHuang/MSG-Book/issues/29> 此外,毕竟基于 cowplot 的排图方式已经有很成功的实践,见 <https://serialmentor.com/dataviz/histograms-density-plots.html> 支持不同图形系统的组合和强大的注释功能

      Cloud2016 我想直接 fork 你的库,但是收到提示说我已经 fork 过了,然后提示上显示的是 msgtv 这个库。

        Liechi 你建立 PR 的时候,上流 repo 选我的仓库,而不是大鹏的仓库

          Cloud2016 我选择了你的库发 PR,这样以前我跟大鹏作的所有的修改都会被推过来,但我希望推送的只是关于第五章的最近两次修改。我能全推过来,但你只接受最近两次 commits 吗?

            Cloud2016 这个 issue 我之前看到了。cowplot 我不熟,暂时没顾上尝试,不过我猜那样的话可能每个插图大小都要调整,眼下实在没精力,可能将来统稿时统一修改比较容易吧。况且,这个极乐净土版的练习性和实验性很强,基本属于自娱自乐,我并不确定这个并排显示有没有意义……

              dapengde 原来你调用了 ggpubr 包,那也无所谓了,它包裹了 cowplot 所以也具有很强的注释能力

              Liechi 我想了想,你还是把 PR 提给 @dapengde 吧,操作上更方便一些

                Cloud2016 好的。

                Liechi 我做了个任务分配表在项目首页。你要是正在画的话,过来注明一下吧,免得同时重复劳动。4.1 到 4.9 章我今天应该能做完。

                  dapengde Liechi

                  我建议在 ggplot2 里复现 Base R 图形能不能不仅仅形似,而且做到神似,神似不是要追求真假难辨,而是在深入了解 Base R 绘图的过程后(这其中很可能涉及统计的内容,如直方图),将其等价地转换为 ggplot2 代码。如果把图库这一章按照这要求复现出来,我想应该能在统计和可视化两个层面上更上一层楼,这对于提高这两方面的水平是非常有意义的。练习的意义就会更深一层,毕竟我发现两位大侠都是 ggplot2 的粉丝,基础的操作都会。

                  为了说清楚,以现代统计图形之图库之直方图为例,

                  # 这是 Base R 版
                  par(mfrow = c(2, 2), mar = c(2, 3, 2, .5), mgp = c(2, .5, 0))
                  data(geyser, package = "MASS")
                  hist(geyser$waiting, main = "(1) freq = TRUE", xlab = "waiting")
                  hist(geyser$waiting, freq = FALSE, xlab = "waiting", main = "(2) freq = FALSE")
                  hist(geyser$waiting, breaks = 5, density = 10, xlab = "waiting", main = "(3) breaks = 5")
                  hist(geyser$waiting, breaks = 40, col = "red", xlab = "waiting", main = "(4) breaks = 40")
                  # 这是 ggplot2 版
                  library(ggplot2)
                  library(cowplot)
                  p <- ggplot(aes(waiting), data = geyser)
                  p1 <- p + geom_histogram(breaks = seq(40, 110, by = 5))
                  p2 <- p + geom_histogram(breaks = seq(40, 110, by = 5), aes(y = stat(density)))
                  p3 <- p + geom_histogram(breaks = seq(40, 110, by = 10))
                  p4 <- p + geom_histogram(breaks = seq(42, 108, by = 2), fill = "red", color = "black")
                  plot_grid(p1, p2, p3, p4, labels = c(
                    "(1) freq = TRUE",
                    "(2) freq = FALSE",
                    "(3) breaks = 5",
                    "(4) breaks = 40"
                  ), ncol = 2)

                  注意 ggplot2 版的 breaks 的设置,它来源于 Base R 版的绘图结果,不是试出来的。以第一个子图为例

                  h <- hist(geyser$waiting, main = "(1) freq = TRUE", xlab = "waiting")
                  h
                  $breaks
                   [1]  40  45  50  55  60  65  70  75  80  85  90  95 100 105 110
                  
                  $counts
                   [1]  2 26 29 25 17 10 34 59 44 35 14  3  0  1
                  
                  $density
                   [1] 0.0013377926 0.0173913043 0.0193979933 0.0167224080 0.0113712375
                   [6] 0.0066889632 0.0227424749 0.0394648829 0.0294314381 0.0234113712
                  [11] 0.0093645485 0.0020066890 0.0000000000 0.0006688963
                  
                  $mids
                   [1]  42.5  47.5  52.5  57.5  62.5  67.5  72.5  77.5  82.5  87.5  92.5  97.5
                  [13] 102.5 107.5
                  
                  $xname
                  [1] "geyser$waiting"
                  
                  $equidist
                  [1] TRUE
                  
                  attr(,"class")
                  [1] "histogram"

                  此节的另一个例子是

                  demo("hist_geyser", package = "MSG")
                  df <- data.frame(x = seq(40, 110, 5), y = 0, 
                                   xend = seq(40, 110, 5), yend = ht)
                  p2 + geom_density(fill = "lightgray", color = "black") +
                    geom_segment(aes(x = x, y = y, xend = xend, yend = yend),
                      data = df, lty = 3
                    )

                    Cloud2016 我明白你的意思。这个提议是好的,只是需要时间。

                    除了因为懒之外,我眼下是想把能画的先画出来,目标不是跟原图在细节上(如 breaks)都一致,而是用 ggplot 图把文字表达的意思体现出来就算过关了。

                    仍然以直方图为例,geom_histogram(breaks = seq(40, 110, by = 5)) 固然可以完全重现图(1),然而原文的意思是想展示 R 直方图使用默认参数值的效果(见该图的 caption),那么我觉得,ggplot2 重绘时也应该展示 geom_histogram() 的默认参数值效果,结果就导致跟原图的 breaks 不一致。

                    此节的另一个例子也一样。原书是想展示往直方图添加密度曲线的便利性。便利嘛,越简短越好,所以只需 + geom_density() 就行了。geom_segment() 固然跟原图一致,然而我觉得可能离文字就远了。

                    说到底,到底是向原图看齐,还是向文字看齐……

                    不论如何,都是可以以后慢慢修改的嘛。

                    Cloud2016 这些提议要不都写在 issues 里吧?将来一个一个攻破。放这儿的话怕时间长就忘了。

                      6 天 后

                      @yihui 自主动接受这个任务到目前为止,我觉得书稿的搬迁工作已经完成了,任务完成了,接下来应该是动内容了,我几次欲动笔,但是限于所学和精力,还是忍住了(除了几个地方添加了 TODO 的想法),所以,我现在想的还是您来操刀,特别是各个章节的后续添加或修改计划,对全书的规划,应该有一个纲领性文件,未来加入贡献的应该会越来越多。

                      链接 <https://msg-book.netlify.com/> 是最新的开发版,考虑到后续改动会比较大,所以 <https://bookdown.org/xiangyun/msg/> 维持原稿的样子,只做阶段性推送,算作是稳定版。

                      现代统计图形第二版 <https://github.com/XiangyunHuang/MSG-Book/issues/33> 目前是空的,用作真正的书籍大纲,现代统计图形升级计划 <https://github.com/XiangyunHuang/MSG-Book/issues/1> 是我一时头脑发热,任性添加的,没多大参考意义!

                        这速度真是让我瞠目结舌。非常感谢楼上各位靠谱厮!这真是应了塞内卡那句话:

                        不是因为事情困难,而让我们不敢做;是因为我们不敢做,事情才变得困难。

                        我就是不敢碰这本书稿,才觉得把它迁移到 R Markdown 里太困难。

                        Cloud2016 限于精力的话就没办法了,限于学识则不用担心。我回来操刀的可能性微乎其微。谁有兴趣的话,我大力欢迎合著者:把你的大名挂在书上,内容上随意改,跟我商量不商量都可以。虚左以待!

                          dapengde 对,我不介意退居二作甚至三作,反正我自己肯定是没时间把它捣鼓成一本真的出版物。谁有兴趣尽管上。

                            dapengde 这得看 yihui 是不是在“无出其右”这个场景下用的“虚左以待”了。竖版排印的书作者一般是从右上到左下而排,这时候“虚左”就有“左迁”的意思了。被“虚”的人,如王昌龄,至少得李白写首诗安慰安慰才能平复那颗无处安放的心。

                            哈哈哈,这是我瞎扯的,yihui 当然不是这个意思。

                              多年以前 CRAN 上就有徐俊晓的 统计学与R读书笔记(第六版),这本书已经进行到第六版了,最后还是掉链子了,目前看来应该也不会接上了,这么宏大的工程就一个人在做更加难以完成,如果早期开源出来,或者后来将 tex 书稿开源出来也许还有人继续搞下去,毕竟这本书已经登陆 CRAN 了,影响力也应该可以。我们这个算是一次尝试,很想看看到底是三个僧人没水喝还是一起建了一条沟渠!

                              根据我早些时候流露的想法,在书的写作过程中,不断有新的想法和新的人补充进去,可以是术也可以是道,先从术的部分进入,更新补充书的内容,把书搞厚,把大纲搞长,细分到小节要讲什么,在 Github 上猛开 Issues,然后不断有人将 issues 转化为一个个段落,再把 issues 关掉。至于谁是一作、二作还是三作、四作可以最后就贡献的多少排座次。最后能不能变成一本捧在手里的出版物就不好说了,毕竟电子版完全公开的原创书籍,国内哪个出版社愿意砸钱?

                              总之,希望来一次集体智慧写书 🎨

                                Liechi 懂得太多了就是累……

                                Cloud2016 最后掉链子是啥意思?是指最终没出版吗?这事儿坚持下来挺难的。