ggplot2安装失败包载入失败,不知道是什么原因

医学会议频道
聚焦转化医学和多学科融合
MedSci梅斯医学APP下载
大家还在关注:
10个问题助你精通R作图包ggplot2 package
作者:Manish saraswat&&&来源:36大数据 译
还没入门,感觉命令语句难懂
请问,有数据吗,不好练习的
很实用,ggplot2
很实用,ggplot2
很实用,ggplot2
很实用,ggplot2
相关资讯:
猜你感兴趣
资讯分类阅读
关注Medsci
免责声明:MedSci(梅斯医学)登载此文出于传递信息目的,并不意味着赞同其观点或证实其描述。内容仅供专业医生学习,不可替代医师诊断或处方,具体诊断和治疗请咨询专科医生,本站不承担由此导致的相关责任。
MedSci备案号
扫码领取IF曲线
IF连续增长的期刊后使用快捷导航没有帐号?
查看: 941|回复: 6
求助,为何安装ggplot2包总是失败?
注册会员, 积分 58, 距离下一级还需 142 积分
论坛徽章:1
如题,运用语句 install.packages(“”)在Rstudio中安装ggplot2包,总是安装失败?求大神指教
注册会员, 积分 58, 距离下一级还需 142 积分
论坛徽章:1
Error in library(ggplot2) : 不存在叫‘ggplot2’这个名字的程辑包:cry:求助~~
注册会员, 积分 55, 距离下一级还需 145 积分
论坛徽章:4
不要在r studio中装,可能有不兼容。直接用R装,会容易很多
注册会员, 积分 58, 距离下一级还需 142 积分
论坛徽章:1
不要在r studio中装,可能有不兼容。直接用R装,会容易很多
我在R里面试过之后还是出现不存在的提示...
中级会员, 积分 291, 距离下一级还需 209 积分
论坛徽章:6
可能是依赖的包出现问题,你可以去官网下载ggplot2包来自己安装
注册会员, 积分 58, 距离下一级还需 142 积分
论坛徽章:1
可能是依赖的包出现问题,你可以去官网下载ggplot2包来自己安装
感谢回答,后来发现是镜像有问题,换了之后可以安装了
注册会员, 积分 58, 距离下一级还需 142 积分
论坛徽章:1
完成互动作业,顺便给自己顶贴
扫一扫加入本版微信群关于ggplot2包的基本功能介绍(上) - 知乎专栏
{"debug":false,"apiRoot":"","paySDK":"/api/js","wechatConfigAPI":"/api/wechat/jssdkconfig","name":"production","instance":"column","tokens":{"X-XSRF-TOKEN":null,"X-UDID":null,"Authorization":"oauth c3cef7c66aa9e6a1e3160e20"}}
{"database":{"Post":{"":{"contributes":[{"sourceColumn":{"lastUpdated":,"description":"学习笔记","permission":"COLUMN_PUBLIC","memberId":,"contributePermission":"COLUMN_PUBLIC","translatedCommentPermission":"all","canManage":true,"intro":"","urlToken":"c_","id":27377,"imagePath":"v2-4d9b5275925cdfa9ceb2e5.jpg","slug":"c_","applyReason":"0","name":"黄锐","title":"黄锐","url":"/c_","commentPermission":"COLUMN_ALL_CAN_COMMENT","canPost":true,"created":,"state":"COLUMN_NORMAL","followers":95,"avatar":{"id":"v2-4d9b5275925cdfa9ceb2e5","template":"/{id}_{size}.jpg"},"activateAuthorRequested":false,"following":false,"imageUrl":"/v2-4d9b5275925cdfa9ceb2e5_l.jpg","articlesCount":9},"state":"accepted","targetPost":{"titleImage":"/v2-acb7f0516beead7c51fe76_r.png","lastUpdated":,"imagePath":"v2-acb7f0516beead7c51fe76.png","permission":"ARTICLE_PUBLIC","topics":[13,14441],"summary":"本文是在ggplot2包的开发者Hadley Wicham大神的个人主页上找到一篇文章,被收录在他所著的R for Data Science一书中作为一个章节的教程。这一章主要是对ggplot2包的一些基础功能的做出了较为详细的介绍,大家可以结合《R语言实战》一书中第19章的内容来进行…","copyPermission":"ARTICLE_COPYABLE","translatedCommentPermission":"all","likes":0,"origAuthorId":0,"publishedTime":"T23:21:56+08:00","sourceUrl":"","urlToken":,"id":2842000,"withContent":false,"slug":,"bigTitleImage":false,"title":"关于ggplot2包的基本功能介绍(上)","url":"/p/","commentPermission":"ARTICLE_ALL_CAN_COMMENT","snapshotUrl":"","created":,"comments":0,"columnId":27377,"content":"","parentId":0,"state":"ARTICLE_PUBLISHED","imageUrl":"/v2-acb7f0516beead7c51fe76_r.png","author":{"bio":"","isFollowing":false,"hash":"333c485b877de4bc2f9f4db157c00681","uid":00,"isOrg":false,"slug":"huang-rui-87-34","isFollowed":false,"description":"","name":"黄锐","profileUrl":"/people/huang-rui-87-34","avatar":{"id":"415596edf0ce6a0728b1ed","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},"memberId":,"excerptTitle":"","voteType":"ARTICLE_VOTE_CLEAR"},"id":630123}],"title":"关于ggplot2包的基本功能介绍(上)","author":"huang-rui-87-34","content":"本文是在ggplot2包的开发者Hadley Wicham大神的个人主页上找到一篇文章,被收录在他所著的R for Data Science一书中作为一个章节的教程。这一章主要是对ggplot2包的一些基础功能的做出了较为详细的介绍,大家可以结合《R语言实战》一书中第19章的内容来进行学习。虽然经过一遍校正,但是下面的翻译中还有一些不准确的地方,希望大家见谅,这里也附上原文的链接1. 介绍“相比于其他形式,简单的图表可以让数据分析师获取更多信息。” ——John\nTukey这一章将教会你如何使用gglplot2包对你的数据进行可视化处理。R有很多用来绘制图表的程序,但是ggplot2是其中最优雅也是功能最强大的工具。ggplot2按照一种条理清楚的图表语法来描述和创建图表。通过学习ggplot2这一种工具包,你可以很好地提升你的工作效率,并且可以将它应用到更多地方。在开始之前,如果你想了解更多关于ggplot2包理论性的基础知识,我推荐你阅读“图表的分层语法”,.1.1前言这章我们主要关注ggplot2包,它是tidyverse的一个核心成员。为了访问数据资料,帮助页面和一些我们将要在本章用到的功能,请首先通过以下代码加载tidyverse:library(tidyverse)\n#& Loading tidyverse: ggplot2\n#& Loading tidyverse: tibble\n#& Loading tidyverse: tidyr\n#& Loading tidyverse: readr\n#& Loading tidyverse: purrr\n#& Loading tidyverse: dplyr\n#& Conflicts with tidy packages\n----------------------------------------------\n#& filter(): dplyr, stats\n#& lag():
dplyr, stats\n一行代码即可加载tidyverse包,这是一个你几乎将会在每一次数据处理过程中都会用到的工具包。它也会告诉你包中的哪些功能会和基础R中的功能发生冲突(或者是与其他一些你已经加载过的包)。如果你运行这句代码并且得到了错误信息“there\nis no package called ‘tidyverse’”,这说明你首先需要安装tidyverse包,然后再次运行library():install.packages(\"tidyverse\")\nlibrary(tidyverse)\n每个工具包只需要被安装一次,但是当你每次开始编写一段新的代码时你都要重新加载工具包。如果我们需要搞清楚某一个功能(或是数据)来源于哪,我们将会使用一种特殊的形式:package::function().例如ggplot2::ggplot() 会明确的告诉你我们正在使用ggplot2包中ggplot()的功能。2. 第一步让我们使用下面第一幅图表来回答一个问题:是汽车的发动机型号越大使用的燃料越多吗?你也许已经有了一个答案,但是尝试着让你的答案更加准确。发动机的型号和燃油率之间有什么关系,是正相关还是负相关,是线性还是非线性?2.1mpg数据框你可以通过ggplot2中的mpg数据框来检验你的答案。数据框是把变量和观测值收集整理到一个矩形框中(变量为列,观测为行)。mpg包含了US\nEnvironment Protection Agency收集到的38种车型的观测值。mpg\n#& # A tibble: 234 × 11\n#&
manufacturer model displ
&chr& &chr& &dbl& &int& &int&
&chr& &chr& &int& &int& &chr&\n#& 1
4 manual(m5)
4 manual(m6)
6 manual(m5)
p\n#& # ... with 228 more rows, and 1 more variables: class &chr&\nmpg中的变量:1.
\ndispl,汽车的发动机型号,以公升计量。2.
\nhwy,汽车在公路上行驶时的燃油率,单位是加仑每米。行驶同样距离,低燃油率的汽车比高燃油率汽车消耗更多燃料。为了了解更多关于mpg的信息,请通过?mpg语句使用帮助功能。2.2创造一个ggplot为了绘制mpg的图表,请运行以下代码来使displ成为x轴hwy成为y轴:ggplot(data = mpg) +\n
geom_point(mapping = aes(x = displ, y = hwy))\n点图展示了发动机型号和燃油率的负相关关系。换句话说,大型号发动机的汽车会使用更多燃料。这是否证实或否认了你之前的观点?通过ggplot2,你可以用ggplot()功能来绘制一个图表。ggplot()会创建一个坐标系,你可以在坐标系上添加图层。ggplot()中的第一条语句声明了将要在图表中使用的数据组。也就是说ggplot(data=mpg)会创建的一个空的图表,但是这没什么意思,所以我就不在这里演示它了。你将通过ggplot()里添加一个或两个图层来完成你的图表。函数geom-point()可添加一层点图到你的图表里,也就是创建一副散点图。ggplot2提供了许多几何图形的功能来添加不同类型的图层到图表中。通过本章的学习你将会对它们有所了解。每一个几何函数都需要一个mapping语句。它可以定义数据组中的变量是如何被绘制成可视图形的。mapping语句经常配合aes()语句使用,aes()中的x和y语句规定了哪个变量将会被绘制到x轴和y轴。ggplot2在data中寻找可添加的变量,在本案例中就是mpg数据组。2.3一个图表模板让我们把这段代码转变成一个可反复使用的制图模板。当你要绘制图表时,请首先用数据组、几何功能语句或者是一些绘图语句的集合来代替下面代码中括号里的内容。ggplot(data = &DATA&) +\n\n
&GEOM_FUNCTION&(mapping = aes(&MAPPINGS&))\n本章接下来的内容将想你展示如何去完成并且扩展这个模板,以来绘制不同类型的图表。我们将首先从&MAPPINGS& 这部分开始讲解。2.4练习1.运行代码ggplot(data=mpg),你会看到什么?2.mtcars中有多少行和多少列数据?3.drv变量表示什么?阅读?mpg的帮助页面来查看一下。4.绘制一幅hwy和cyl的散点图。5.如果你绘制一幅class和drv的散点图会发生什么?为什么无法进行绘制?3. Aesthetic\nmappings“图表最大的价值在于它让我们注意到了我们从没有想到过的问题”
\n——John\nTukey在下面的图表中,一组点(用红色强调)看起来似乎脱离了线性趋势。这些汽车会行驶更远的距离,你怎样来解释这个现象?让我们来假设这些是混合动力型的汽车。一种来检验这种假设的方式是查看每一辆汽车的class值。mpg中的class变量将汽车的种类进行了划分,例如小型、中型、suv等等。如果离线的点是混合型汽车,它们应该被划分为小型汽车或者是超小型汽车(请记住这份数据是在混合型卡车和SUV流行之前被整理收集的)。你可以在图表中加入第三个变量,比如说类型,通过改变形状来将它加入到一个二维的散点图中。图形是你的图表中一种可视化的表达。图形包括它的大小、形状或者是颜色。你可以通过改变图形参数来展示出不同类型的点。因为我们已经使用“value”来描述数据,所以接下来我们使用“level”来表示图形参数。这里我们改变图形的大小、形状和颜色等参数来让我们的点变小,变成 三角形或者是变成蓝色:你可以通过图表中的图形来表达变量的信息。例如,你可以使用点的颜色来表示不同类型的汽车。ggplot(data = mpg) + \n
geom_point(mapping = aes(x = displ, y = hwy, color = class))\n为了用图形来表示变量,你要在aes()中将图形参数的名字和变量联系在一起。ggplot2将会自动分配一个唯一的图形参数(这里是颜色)给每一个唯一的变量值,这个过程被称作是scaling。ggplot2也会自动添加一个图例来解释不同的图形参数和变量之间是如何对应的。通关观察颜色我们可以发现图形中的离群点是两座汽车。这些汽车似乎并不是混合型而是跑车。跑车拥有很大的发动机,例如SUV和皮卡,和中小型的车身,因此会提高它们每公升汽油所行驶的里程数。在上面的例子中,我们用图形的不同颜色来表达class变量,同样我们也可以用图形的大小来表示class变量。这种情况下,每一个点的大小将会表示出它的种类信息。这里我们得到了一个警告信息,因为我们将一个无序变量(class)添加了一个有序的图形参数(大小),这并不是一个好主意。ggplot(data = mpg) + \n
geom_point(mapping = aes(x = displ, y = hwy, size = class))\n#& Warning: Using size for a discrete variable is not advised.\n或者我们也可以为class添加alpha 的图形参数,可以控制点的形状和透明度。# Left\nggplot(data = mpg) + \n
geom_point(mapping = aes(x = displ, y = hwy, alpha = class))\n\n# Right\nggplot(data = mpg) + \n
geom_point(mapping = aes(x = displ, y = hwy, shape = class))\nSUV为什么没有显示图形?ggplot2一次性只能使用六种图形。默认情况下,当你使用图形的形状参数时额外的变量将不被绘制。对于每一个图形参数,你都可使用aes()将参数的名称和所要表示的变量相关联。aes()函数的功能是将所有图形参数集合在一起,并将其映射到一个图层,再通过语句将其添加到图表上。语法强调了一个关于x和y的有用信息:一个点的x和y轴的坐标位置是它们本身所自带的一种图形信息,你可以通过这种视觉上的特性来表达数据变量所包含的信息。一旦你处理好了图形参数,ggplot2包将会自动处理余下的问题。它会挑选一个合适的大小绘制图形,并且会构建一个图例项来解释图形参数和变量之间的关系。对于x和y的参数,ggplot2不会创建一个图例,但是它会自动创建一个带有刻度线和标签的x坐标轴。坐标轴在这里发挥图例的功能,它解释了图形的位置和它 的值之间的关系。你也可以手动为图形添加一些特定的参数信息,例如,我们可以让图形中 的所有点都变成蓝色:ggplot(data = mpg) + \n
geom_point(mapping = aes(x = displ, y = hwy), color = \"blue\")\n这里颜色并没有表示变量的信息,只是改变了图表的外观。手动添加图形参数,直接将参数名字写到你的aes()语句里。你需要为图形挑选一个参数值:用字符串来表示的一种颜色;以毫米为单位来计量的图形大小;用数字来表示的点的大小(如下表所示)。R中可以用数字来定义25种不同的图形。其中一些看起来似乎是重复的,例如\n0,15和22全都是正方形。不同之处在于图形的边框颜色和填充颜色。无填充的图形(0-14)通过colour定义其边界线条的颜色,有填充而无边界的图形(15-18)通过colour来定义填充色,既有填充也有边界的图形(21-24)通过colour定义边界颜色,通过fill定义填充色。3.1练习1.
\n下面这段代码出了什么问题,为什么他们的颜色不是蓝色?ggplot(data = mpg) + \n
geom_point(mapping = aes(x = displ, y = hwy, color = \"blue\"))\n1.
\nmpg中哪些变量是类别型变量,哪些变量是连续型变量?(提示:用?mpg来读取数据组中的信息)。当你使用mpg的时候你如何知道这些信息。2.
\n为一个连续型变量添加颜色、大小、形状的参数,这些图形在表示类别型和连续型变量时有什么不同?3.
\n如果将给同一个变量添加多种类型的图形参数会怎样?4.
\nstroke图形参数是什么?它会使用什么样的形状?(提示:使用?geom-point)5.
\n如果你将图形参数添加给非变量值会发生什么?例如:ase(colour=displ&5)?4. 常见问题当你使用R的时候,你会遇到很多问题。别担心,每个人都会遇到这些问题。我使用R语言很多年了,每天仍会写出很多错误代码。仔细比较你写好的代码和书中的代码。R非常挑剔,一个字符的错误就会造成很大的不同。要确保每个字符都有所匹配。有时你运行了代码但是却没有结果显示,检查一下你左手边的控制台,如果显示a+,这说明R认为你还没有写完代码,它在等待你完成你的代码。这种情况下,你通常可以按下ESCAPE键来结束正在运行的程序继续编写你的代码。当你创建ggplot2图表时一个常见的问题就是把“+”放在了错误的位置,它需要放在一行代码的结尾处,而不是开头处。换句话说,确保你的代码不会写成下面这样:ggplot(data = mpg) \n+ geom_point(mapping = aes(x = displ, y = hwy))\n如果你仍然不太明白,请使用help功能。你可以通过在控制台中运行?funtion-name来查询R的任何功能,或者是在RStudio中选择好函数的名字然后按F1键。不要担心看不懂帮助里的说明,你可以直接拉到页面底部查看贴合你需求的使用案例。如果还是不能解决的问题,仔细阅读以下报错信息,有时答案也许就藏在里面。但是当你是个R语言的使用新手时,你也许还不能理解这些报错信息。另一个比较好用的工具就是Google,尝试去google这些报错信息,很有可能别人也有同样的问题,并且在网上找到了答案。5. Facets改变图形参数是为你的图表添加额外变量的一种方式。另一种方式是将你的图表划分为若干区域(特别是对类别型变量十分有用),每一块区域都会展示出变量中的一个小子集。为了能通过一个变量来将你的图表划分区域,你可以使用facet-wrap()函数。函数中的第一个语句应为公式,这里你可以通过使用“~”符号加上变量名来创建它(这里所说的公式是指R中数据结构的名称,而不是指一个等式)。你向facet-wrap()函数中传递的变量应该是离散型的。ggplot(data = mpg) + \n
geom_point(mapping = aes(x = displ, y = hwy)) + \n
facet_wrap(~ class, nrow = 2)\n要在两个变量的组合上绘制图形,请将facet_grid()添加到绘图调用中。 facet_grid()的第一个参数也是一个公式, 这一次,公式应该包含两个由?分隔的变量名。ggplot(data = mpg) + \n
geom_point(mapping = aes(x = displ, y = hwy)) + \n
facet_grid(drv ~ cyl)\n5.1练习1.如果将一个连续型变量进行划分会怎么样?2.在facet-grid(drv~cyl)所绘制的图表中,空的单元区域代表什么?它们和图表有什么关系?3.下面的代码会绘制出什么样的图形,“.”符号有什么作用?ggplot(data = mpg) +\n\n
geom_point(mapping = aes(x = displ, y = hwy)) +\n\n
facet_grid(drv ~ .)\n\n \n\nggplot(data = mpg) +\n\n
geom_point(mapping = aes(x = displ, y = hwy)) +\n\nfacet_grid(. ~ cyl)\n4.本节中第一个使用这种划分区域型图表的案例:ggplot(data = mpg) +\n\n
geom_point(mapping = aes(x = displ, y = hwy)) +\n\nfacet_wrap(~ class, nrow = 2)\n相较于用颜色来代表变量它有什么优势?有什么劣势?如果你有一个更大的数据组你要如何来平衡它们之间的优劣。5.读一下?facet-wrap的帮助页。nrow和ncol各有什么功能?还有哪些其它选项可以控制表格的布局?为什么facet-grid()中没有nrow和ncol选项?6.当你使用facet-grid()时你应该将列中含有更多唯一值的变量放入其中,为什么?6. Geometric objects下面这两幅图是不是看起来很像?两个图标拥有同样的x轴和Y轴,它们都描述了同样的数据。但是它们的图表类型并不相同,两个图表各自使用了不同的图形来展示数据。在ggplot2语法中,我们称它们使用了不同的geoms。geoms是图表用来展示数据的几何图形的参数选项。人们通常会用这些这些几何图形来描述数据。 例如,条形图使用了条形几何参数,线形图使用了线性几何参数,箱线图使用了箱线几何参数等等。正如我们所看到的,我们可以使用不同的几何图形来绘制同样的数据图表。左侧的图表使用了点图,右侧使用了平滑的曲线图,通过一条平滑曲线来拟合了数据的分布情况。为了改变图表中的几何形状,你可以在gglot()中添加geom功能,例如,你可以通过以下代码来绘制出上面的两幅图:# left\nggplot(data = mpg) + \n
geom_point(mapping = aes(x = displ, y = hwy))\n\n# right\nggplot(data = mpg) + \n
geom_smooth(mapping = aes(x = displ, y = hwy))\n在gglot2中的每一个geom功能都需要一个mapping语句。然而并不是每一个图形参数和几何类型之间都可以互相匹配。你可以为一个点设置形状,但是你不能为一条线设置“形状”。geom-smooth()可以画出不同类型的线,你可以用不同的线来代表不同的变量。ggplot(data = mpg) + \n
geom_smooth(mapping = aes(x = displ, y = hwy, linetype = drv))\n这里geom-smooth()根据drv值将汽车分成了三种不同的线型。一条线代表drv为4的数据,一条线代表drv为f的数据,一条线代表drv为r的数据。这里4代表四轮驱动,f代表前轮驱动,r代表后轮驱动。\n\n如果这看起来比较奇怪,我们可以让它更清晰一点,将线条直接叠加在原来的散点图上,并且用颜色区分不同的drv值。注意到了吗,这幅图表包含了两种不同的几何类型。不要激动,下一节我们就会学习怎样在同一副图表中添加不同类型几何图形。ggplot2提供了超过30种几何类型的图表,而扩展包提供了更多(这个网页中有示例的备忘单是简单理解这些图表的最好的方式,你可以在这里找到它。如果想单独学习某一种图表可以使用帮助功能查看。很多图表比如geom-smooth()使用一种几何图形就可以展示多个变量。对于这些图表,你可以设定一组图形参数来表达这些不同的变量。ggplot2会给这组变量中的每一个唯一值都画一个可区分的图形。在练习中,ggplot2将会自动为离散型的变量分组,并且给他们添加几何参数(就像上面那个线形图的例子)。R的这种功能用起来很方便,因为这样的自动分组不需要我们再去做多余的解释说明。ggplot(data = mpg) +\n
geom_smooth(mapping = aes(x = displ, y = hwy))\n
\nggplot(data = mpg) +\n
geom_smooth(mapping = aes(x = displ, y = hwy, group = drv))\n 为了能在同一副图表中展示多种图表类型,你可以将要添加的图表类型的geom函数写在ggplot()中:ggplot(data = mpg) + \n
geom_point(mapping = aes(x = displ, y = hwy)) +\n
geom_smooth(mapping = aes(x = displ, y = hwy))\n然而在上面的代码中有一些重复的部分。试想一下如果我们想要改变Y轴,用cty变量来代替hwy变量,你需要在两个位置修改变量名称,这样你也许漏掉其中一个。你可以通过直接在ggplot()中定义xy轴来避免这种重复的写法,ggplot2会把这样的图形参数当作全局参数来应用到每一幅图表上。换句话说,下面的代码可以绘制出和上面相同的图表:ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) + \n
geom_point() + \n
geom_smooth()\n如果你再向geom中添加参数,ggplot2会把它们当做图层叠加在图表上。它会使用这些参数来扩展或者是修改在ggplot()中定义好的全局变量。这就使图表在不同的图层可以展示出不同的图形特性。ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) + \n
geom_point(mapping = aes(color = class)) + \n
geom_smooth()\n你可以用同样的想法来使每一个图层单独表示一组数据。这里我们的曲线仅仅代表mpg数据组中小型汽车的数据资料。geom-smooth()中的语句在它的图层上改变了ggplot()中没有遵守ggplot()中定义的全局变量:ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) + \n
geom_point(mapping = aes(color = class)) + \n
geom_smooth(data = filter(mpg, class == \"subcompact\"), se = FALSE)\n你会在下一章里学到如何使用filter()函数,这里你只需要知道这条命令是用来挑选小型汽车这个变量的就可以了。)6.1练习1.在你绘制线图、直方图、箱线图和区域图的时候你都会用到什么geom语句。2.首先在你的脑海里运行下面这段代码并想象会输出什么结果,然后在R中运行代码检验你的猜想。ggplot(data = mpg, mapping = aes(x = displ, y = hwy, color = drv)) + \n
geom_point() + \n
geom_smooth(se = FALSE)\n3.show.legend=FALSE有什么用?如果去掉它会有什么影响?4.geom-smooth()中的se语句有什么用?5.下面的这两幅图表有什么区别吗?为什么?ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) + \n
geom_point() + \n
geom_smooth()\n\nggplot() + \n
geom_point(data = mpg, mapping = aes(x = displ, y = hwy)) + \n
geom_smooth(data = mpg, mapping = aes(x = displ, y = hwy))\n6.用R绘制出下面这些图表:","updated":"T15:21:56.000Z","canComment":false,"commentPermission":"anyone","commentCount":0,"collapsedCount":0,"likeCount":13,"state":"published","isLiked":false,"slug":"","isTitleImageFullScreen":false,"rating":"none","titleImage":"/v2-acb7f0516beead7c51fe76_r.png","links":{"comments":"/api/posts//comments"},"reviewers":[],"topics":[{"url":"/topic/","id":"","name":"ggplot2"},{"url":"/topic/","id":"","name":"R(编程语言)"},{"url":"/topic/","id":"","name":"数据可视化"}],"adminClosedComment":false,"titleImageSize":{"width":1152,"height":711},"href":"/api/posts/","excerptTitle":"","column":{"slug":"c_","name":"黄锐"},"tipjarState":"inactivated","annotationAction":[],"sourceUrl":"","pageCommentsCount":0,"hasPublishingDraft":false,"snapshotUrl":"","publishedTime":"T23:21:56+08:00","url":"/p/","lastestLikers":[{"bio":"学生","isFollowing":false,"hash":"dc5d450c1e80afe1bd1f8aaa","uid":392800,"isOrg":false,"slug":"tao-zi-wei-bing","isFollowed":false,"description":"","name":"桃子味冰","profileUrl":"/people/tao-zi-wei-bing","avatar":{"id":"da8e974dc","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},{"bio":"程序员","isFollowing":false,"hash":"b6af1d2efb1f7e8f9c6ee","uid":949400,"isOrg":false,"slug":"kingsleywang-89","isFollowed":false,"description":"","name":"Kingsley Wang","profileUrl":"/people/kingsleywang-89","avatar":{"id":"da8e974dc","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},{"bio":"上了金融计量的贼船","isFollowing":false,"hash":"7aa4aa823222aeda5bfc05","uid":20,"isOrg":false,"slug":"jin-wei-wei-20","isFollowed":false,"description":"基础不扎实的宽客小白","name":"EvilSpawn","profileUrl":"/people/jin-wei-wei-20","avatar":{"id":"a15a8e6a8","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},{"bio":"数据分析","isFollowing":false,"hash":"b33aeacda681","uid":307400,"isOrg":false,"slug":"luluz-22","isFollowed":false,"description":"","name":"Lulu.z","profileUrl":"/people/luluz-22","avatar":{"id":"v2-9be89aa2f9aa","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},{"bio":"","isFollowing":false,"hash":"4c44b01734fbcdad411d6","uid":20,"isOrg":false,"slug":"mi-si-te-da-yan-jing","isFollowed":false,"description":"","name":"米斯特大眼睛","profileUrl":"/people/mi-si-te-da-yan-jing","avatar":{"id":"da8e974dc","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false}],"summary":"本文是在ggplot2包的开发者Hadley Wicham大神的个人主页上找到一篇文章,被收录在他所著的R for Data Science一书中作为一个章节的教程。这一章主要是对ggplot2包的一些基础功能的做出了较为详细的介绍,大家可以结合《R语言实战》一书中第19章的内容来进行…","reviewingCommentsCount":0,"meta":{"previous":{"isTitleImageFullScreen":false,"rating":"none","titleImage":"/50/v2-925b93eae11edd56d0052_xl.jpg","links":{"comments":"/api/posts//comments"},"topics":[{"url":"/topic/","id":"","name":"R(编程语言)"},{"url":"/topic/","id":"","name":"数据分析"}],"adminClosedComment":false,"href":"/api/posts/","excerptTitle":"","author":{"bio":"","isFollowing":false,"hash":"333c485b877de4bc2f9f4db157c00681","uid":00,"isOrg":false,"slug":"huang-rui-87-34","isFollowed":false,"description":"","name":"黄锐","profileUrl":"/people/huang-rui-87-34","avatar":{"id":"415596edf0ce6a0728b1ed","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},"column":{"slug":"c_","name":"黄锐"},"content":"1.朝阳医院销售数据首先过一遍猴哥第三讲的实践案例,大体分为两个部分:数据预处理和数据分析。1).数据预处理:列名重命名、删除缺失数据的观测、处理日期格式、数据类型转换、数据排序。代码如下:library(\"stringr\")\nlibrary(\"openxlsx\")\nreadfilePath&-\"C:/Users/21/Desktop/朝阳医院2016年销售数据.xlsx\"\nexcelData&-read.xlsx(readfilePath,\"Sheet1\")\nexcelData&-na.omit(excelData)\nnames(excelData)&-c(\"time\",\"cardno\",\"drugID\",\"drugName\",\"saleNumber\",\n
\"virtualMoney\",\"actualMoney\")\ntimeSplit&-str_split_fixed(excelData$time,\" \",n=2)\nexcelData$time&-timeSplit[,1]\nclass(excelData$time)\nexcelData$time&-as.Date(excelData$time,\"%Y-%m-%d\")\nclass(excelData$time)\nexcelData$saleNumber&-as.numeric(excelData$saleNumber)\nexcelData$virtualMoney&-as.numeric(excelData$virtualMoney)\nexcelData$actualMoney&-as.numeric(excelData$actualMoney)\nexcelData&-excelData[order(excelData$time),]\n2).数据分析:月均消费次数=总消费次数/月份数& kip1&-excelData[!duplicated(excelData[,c(\"time\",\"cardno\")]),]\n& consumerNumber&-nrow(kip1)\n& startTime&-kip1$time[1]\n& endTime&-kip1$time[nrow(kip1)]\n& day&-endTime-startTime\n& day&-as.numeric(day)
#从difftime类型转为numeric\n& month&-day%/%30\n& monthConsume&-consumerNumber/month\n& monthConsume
#月均消费次数\n[1] 899.6667\n其中duplicated()函数可以挑选出重复值,并返回一个逻辑向量。月均消费金额=总消费金额/月份数& totalMoney&-sum(excelData$actualMoney,na.rm = TRUE)\n& monthMoney&-totalMoney/month\n& monthMoney
#月均消费金额\n[1] 50771.71\n客单价=总消费金额/总消费次数& pct&-totalMoney/consumerNumber\n& pct
#客单价\n[1] 56.43391\n 消费趋势week&-tapply(excelData$actualMoney,format(excelData$time,\"%Y-%U\"),sum)
#%U怎么用?\nweek&-as.data.frame.table(week)\nnames(week)&-c(\"time\",\"actualMoney\")\nweek$time&-as.character(week$time)\nweek$timeNumber&-c(1:nrow(week))\nplot(week$timeNumber,week$actualMoney,\n
xlab = \"时间(年份-第几周)\",\n
ylab = \"消费金额\",\n
xaxt = \"n\",
#禁用x坐标轴\n
main= \"2016年朝阳医院消费金额\",\n
col=\"blue\",\n
type=\"b\")\naxis(1,at=week$timeNumber,labels = week$time,cex.axis=1.5)\n其中tapply()函数用来进行分组统计,理解tapply函数花了一些时间,在网上找到一遍博文对tapply和其相关函数有比较好的解释,下面附上链接和图片:还有一个问题没有解决就是“%U”代表什么?在书上和网上都暂时还没有找到答案,留待解决。2.练习数据因为这次的实践作业要求找一份日常工作中的数据来进行简单的处理和分析,可能是我找数据的方法不太对,在网上搜索了半天都没有找到一份合适的数据,最后决定就用我之前学习Excel时候的数据来练习吧。以下两份练习数据均是学习Excel时课程附带的数据,因为数据比较杂乱,只能做非常简单的分析,但是用来练习数据的预处理还是足够的。1).服装市场价格首先导入Excel文件,对每列变量进行重命名:library(\"stringr\")\nlibrary(\"openxlsx\")\nreadfilePath&-\"C:/Users/21/Desktop/练习数据.xlsx\"\nexcelData&-read.xlsx(readfilePath,\"1-日期格式错误\")\nnames(excelData)&-c(\"Time\",\"ProductName\",\"MarketPrice\",\"DiscountPrice\",\n
\"DiscountRate\",\"AdvisoryReason\")\n删除掉缺失数据的观测:excelData&-na.omit(excelData)\n把数据框中的日期转为日期格式:excelData$Time&-as.Date(excelData$Time,\"%Y.%m.%d\")\n转化后日期默认格式是“%Y-%m-%d”,所以可用“-”作为分隔符将年月日分开:Timesplit&-str_split_fixed(excelData$Time,\"-\",n=3)\nexcelData$Year&-Timesplit[,1]\nexcelData$Month&-Timesplit[,2]\nexcelData$Day&-Timesplit[,3]\n按时间排序:excelData&-excelData[order(excelData$Time),]\n最后简单统计一下表格里公记录了多少个月的数据:& kip1&-excelData[!duplicated(excelData[,c(\"Year\",\"Month\")]),]\n& monthNumber&-nrow(kip1)\n& monthNumber\n[1] 15\n这里kip1的数据框长这样:因为之前把日期的年月日都分开了,所以可以用年和月两列变量作duplicated()函数的参数,选出所有年月不重复的数据,可以看最左侧的Time变量,最后统计出来的就是每月第一天的观测,最后用nrow()就可以计算总的月数是多少。2).奥运会历届奖牌记录这次的数据处理起来有点麻烦,首先是队伍一列,每个国家名字前都有一个空格,直接导入R的话这个空格会变成一段乱码,而且奇怪的是这里的空格在Excel里不能用查找替换的方法消除。所以我在Excel里采用了分列的方法来消除空格“数据-分列-固定宽度”,这样就可以将队伍前的空格和文字部分分成两列,删除空格一列即可得到规范的数据。接下来将文件导入R,并重命名:library(\"openxlsx\")\npathway&-\"C:/Users/21/Desktop/练习数据.2.xlsx\"\nOlympicData&-read.xlsx(pathway,\"历届奖牌记录表\")\nOlympicData&-na.omit(OlympicData)\nnames(OlympicData)&-c(\"Event\",\"Time\",\"Ranking\",\"Team\",\"Code\",\"GoldMedal\",\n
\"SilverMedal\",\"BronzeMedal\",\"HeldCity\",\"HeldCountry\")\n我将Excel中的奖牌总数一列删掉,准备用R重新计算一遍,但是发现一些加和后的值为NA,看一下前面的观测可知是因为被加和的数据中有一些无法转成数值类型:通过以下代码用“0”来替换掉“-”再进行计算即可:OlympicData$GoldMedal[OlympicData$GoldMedal==\"-\"]&-0\nOlympicData$SilverMedal[OlympicData$SilverMedal==\"-\"]&-0\nOlympicData$BronzeMedal[OlympicData$BronzeMedal==\"-\"]&-0\n\nOlympicData$GoldMedal&-as.numeric(OlympicData[,6])\nOlympicData$SilverMedal&-as.numeric(OlympicData[,7])\nOlympicData$BronzeMedal&-as.numeric(OlympicData[,8])\n\nOlympicData&-transform(OlympicData,Sum=GoldMedal+SilverMedal+BronzeMedal)\n最后用duplicated()函数计算表中共有多少不同参赛队伍:& kip2&-OlympicData[!duplicated(OlympicData[,c(\"Team\")]),]\n& TotalTeamNumber&-nrow(kip2)\n& TotalTeamNumber
#the number of countries that have joined olympic\n[1] 144\n& \n经过一系列简单的处理和分析之后感觉目前所学的数据处理方式还十分有限,例如难以进行列方向上的分类统计,以及难以从数据框中挑选特定行数据,希望能进一步学习更多的分析方法。","state":"published","sourceUrl":"","pageCommentsCount":0,"canComment":false,"snapshotUrl":"","slug":,"publishedTime":"T15:31:26+08:00","url":"/p/","title":"R语言实战-第三讲实践","summary":"1.朝阳医院销售数据 首先过一遍猴哥第三讲的实践案例,大体分为两个部分:数据预处理和数据分析。1).数据预处理:列名重命名、删除缺失数据的观测、处理日期格式、数据类型转换、数据排序。代码如下:library(\"stringr\")\nlibrary(\"openxlsx\")\nreadfilePath&…","reviewingCommentsCount":0,"meta":{"previous":null,"next":null},"commentPermission":"anyone","commentsCount":2,"likesCount":4},"next":{"isTitleImageFullScreen":false,"rating":"none","titleImage":"/50/v2-f72178d3fcd231eb6c58f_xl.jpg","links":{"comments":"/api/posts//comments"},"topics":[{"url":"/topic/","id":"","name":"数据可视化"},{"url":"/topic/","id":"","name":"ggplot2"},{"url":"/topic/","id":"","name":"R(编程语言)"}],"adminClosedComment":false,"href":"/api/posts/","excerptTitle":"","author":{"bio":"","isFollowing":false,"hash":"333c485b877de4bc2f9f4db157c00681","uid":00,"isOrg":false,"slug":"huang-rui-87-34","isFollowed":false,"description":"","name":"黄锐","profileUrl":"/people/huang-rui-87-34","avatar":{"id":"415596edf0ce6a0728b1ed","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},"column":{"slug":"c_","name":"黄锐"},"content":"7. Statistical transformations下面我们来看一下条形图。条形图看起来很简单,但却很有意思,因为它们揭示了一些图表中的微妙的信息。一个基本的条形图由geom-bar()语句来绘制。下面这幅图根据钻石数据组中的cut变量将其进行了分组。钻石数据组是ggplot2中自带的数据组,包含了大概54000颗钻石的信息,信息包括每颗钻石的price, carat, color, clarity和cut变量。图表表明了切割工艺较好的钻石其使用率会更高。ggplot(data = diamonds) + \n
geom_bar(mapping = aes(x = cut))\nX轴代表钻石的cut变量,Y轴表示数量,但是这里的数量并不是其数据组中的变量。那么这个数量的数据是从哪里来的呢?一些图表例如散点图等会直接将原始数据绘制在图表上,而另一些图表例如条形图则会自动计算新的数值来绘制:条形图,直方图和频率多边形图将数据存储在一起,然后计算每一个箱体中的数据数量。通常使用更平滑的模型来表示你的数据,这样你可以通过模型来进行预测。箱线图会计算一个更强大的分布概要,并且把它显示在一个特定格式的箱中。计算程序为图表计算新值的过程被称作stat,这是Statistical transformations的略称。下面的数据展示了这个过程是如何通过geom-bar()函数来进行的。你可以通过检查stat参数的默认值来了解geom使用哪个stat。例如,?geom-bar里说明了stat的默认的值是count,意思是geom_bar()函数会自动使用stat_count()。stat_count()记录在于geom_bar()相同 的页面上,如果向下滚动,您可以找到一个名为“计算变量”的部分。这部分会告诉它计算了两个新的变量:count和prop。通常可以互换使用几何和统计。 例如,你可以使用stat_count()而不是geom_bar()重新创建前面的图。ggplot(data = diamonds) +\n\n
stat_count(mapping = aes(x = cut))\n这是因为每个geom都有默认的stat值,同样每个stat都有一个默认的geom。 这意味着你通常可以使用geom而不用担心底层的统计变换。 你可能需要明确使用stat的三个原因:1.你可能想要修改默认的stat值。 在下面的代码中,我将geom_bar()的stat从count(默认)更改为identity。 这样可以将条形图的高度映射到y变量的原始值。 不幸的是,当人们随便谈论条形图时,他们可能是指这种类型的条形图,其中条的高度已经存在于数据中,或者前一个条形图中,通过计数行来生成条的高度。demo &- tribble(\n\n
\"bar_1\", 20,\n\n
\"bar_2\", 30,\n\n
\"bar_3\", 40\n\n)\n\n \n\nggplot(data = demo) +\n\ngeom_bar(mapping = aes(x = a, y = b), stat = \"identity\")\n2.你可能希望改变从变量到图表时的默认映射。 例如,你可能需要显示表示比例的条形图,而不是计数:ggplot(data = diamonds) +\n\ngeom_bar(mapping = aes(x = cut, y = ..prop.., group = 1))\n要查找由stat计算的变量,请查找名为“计算变量”的帮助部分。3.你可能希望更加注意代码中的统计转换。 例如,你可以使用stat_summary(),它总结每个唯一x值的y值,以引起对你计算的摘要的注意:ggplot(data = diamonds) +\n\n
stat_summary(\n\n
mapping = aes(x = cut, y = depth),\n\n
fun.ymin = min,\n\n
fun.ymax = max,\n\n
fun.y = median\n\n)\nggplot2提供超过20个统计信息供你使用。 每个统计都是一个功能,所以你可以用通常的方式获得帮助,例如 ?stat_bin。 要查看完整的统计列表,请尝试使用ggplot2的cheatsheet。7.1练习1.与stat_summary()关联的默认几何图表是什么?2. geom_col()的功能是什么? 它与geom_bar()有什么不同?3. 大多数的geom和stat都是成对的。阅读文档并列出所有对,他们有什么共同点?4. stat_smooth()计算什么变量?什么参数控制其行为?5.在我们的比例条形图中,我们需要设置group = 1为什么?换句话说,这两个图表有什么问题?ggplot(data = diamonds) +\n\n
geom_bar(mapping = aes(x = cut, y = ..prop..))\n\n
ggplot(data = diamonds) +\n\n
geom_bar(mapping = aes(x = cut, fill = color, y = ..prop..))\n8. Position adjustments还有一个与条形图相关的神奇功能,你可以使用colour或更有用地fill来绘制不同颜色的条形图:ggplot(data = diamonds) +\n\n
geom_bar(mapping = aes(x = cut, colour = cut))\n\nggplot(data = diamonds) +\n\n
geom_bar(mapping = aes(x = cut, fill = cut))\n请注意,如果将fill的功能映射到另一个变量,会发生什么,如清晰度:条形图被自动堆叠。每个彩色矩形表示切割和清晰度的组合。ggplot(data = diamonds) +\n\n
geom_bar(mapping = aes(x = cut, fill = clarity))\n堆叠条形图会通过位置参数进行自动位置堆叠。如果您不想使用堆叠条形图,则可以使用“identity”,“dodge”或“fill”三种其他选项之一。 position =“identity”将使图表中的每个变量都单独成完整的一条。这对于条形图来说不是很有用,因为它们之间相互重叠。为了看到这个重叠,我们需要通过将alpha设置为一个小的值,使其稍透明,或者通过设置fill = NA使其完全透明。ggplot(data = diamonds, mapping = aes(x = cut, fill = clarity)) +\n\n
geom_bar(alpha = 1/5, position = \"identity\")\n\nggplot(data = diamonds, mapping = aes(x = cut, colour = clarity)) +\n\n
geom_bar(fill = NA, position = \"identity\")\nposition =“fill”和堆叠图类似,但是它可以使每组堆叠的条形都具有相同的高度,这样可以更容易地比较组间的比例。ggplot(data = diamonds) +\n\ngeom_bar(mapping = aes(x = cut, fill = clarity), position = \"fill\")\nposition =“dodge”将重叠对象直接放在一起,这会使得单个值的比较更容易。还有一种其他类型的调整对条形图不起作用,但它对散点图非常有用。 回顾我们的第一个散点图。注意到没有,图表只显示了126个点,即使我们有234个观测值。hwy和displacement的值被舍入取整,所以网格上的许多点都互相重叠。 这个问题被称为overploting, 这种安排使得它很难看到的数据的聚集情况。 数据点是否在整个图形中均匀分布,还是有一个包含其余108个值的hwy和displ的特殊组合方式?你可以通过设置“jitter”参数来避免这种情况。 position =“jitter”给每个点添加少量随机噪声。 由于没有两点可能会接收到相同的随机噪声量,所以这使得数据点的分布得以扩展。ggplot(data = mpg) +\n\n
geom_point(mapping = aes(x = displ, y = hwy), position = \"jitter\")\n添加随机噪音来改善你的图表似乎是一个奇怪的方法,虽然它在小规模的图表上降低了数据的精确度,但是同时它也使得大型图表能够表现出更多信息。 因为个功能非常有用,所以ggplot2提供了geom_point(position =“jitter”)的缩写方式:geom_jitter()。要了解有关位置调整的更多信息,请查找与每个调整相关联的帮助页面:?position_dodge,?position_fill,?position_identity,?position_jitter和?position_stack。8.1练习1.下面这幅图表有什么问题?怎么来改善它?ggplot(data = mpg, mapping = aes(x = cty, y = hwy)) +\n\ngeom_point()\n2. geom_jitter()的哪些参数控制jittering的数量?3.将geom_jitter()与geom_count()进行对比。4. geom_boxplot()的默认位置是什么样的? 创建一个mpg数据组的可视化图表。9. Coordinate systems坐标系可能是ggplot2中最复杂的部分。 默认坐标系是笛卡尔坐标系,其中可以对x和y位置独立地进行操作,以查找每个点的位置。 我们也偶尔会使用到一些其他类型的坐标系。coord_flip()可以转换x轴和y轴。 这很有用,例如你想要画一个箱线图,但是它的标签很长,如果竖直放置的话很难让它的标签在x轴上没有重叠,这时就可以将箱线图竖直放置。ggplot(data = mpg, mapping = aes(x = class, y = hwy)) +\n\n
geom_boxplot() +\n\n
coord_flip()\ncoord_quickmap()函数可以正确设置地图的宽高比。 如果你要用ggplot绘制一个空间的数据,那么这个功能是非常重要的。nz &- map_data(\"nz\")\n\n \n\nggplot(nz, aes(long, lat, group = group)) +\n\n
geom_polygon(fill = \"white\", colour = \"black\")\n\n \n\nggplot(nz, aes(long, lat, group = group)) +\n\n
geom_polygon(fill = \"white\", colour = \"black\") +\n\n
coord_quickmap()\ncoord_polar()函数可以使用极坐标。 极坐标向我们展示了条形图和Coxcomb图之间的关系。bar &- ggplot(data = diamonds) +\n\n
geom_bar(\n\n
mapping = aes(x = cut, fill = cut),\n\n
show.legend = FALSE,\n\n
width = 1\n\n
theme(aspect.ratio = 1) +\n\n
labs(x = NULL, y = NULL)\n\n \n\nbar + coord_flip()\n\nbar + coord_polar()\n9.1练习1.使用coord_polar()将堆叠条形图转成饼图。2.labs()的功能是什么? 阅读文档。3. coord_quickmap()和coord_map()有什么区别?4.下面的图表告诉了你关于cty和hwy之间的哪些信息? 为什么coord_fixed()函数很重要? geom_abline()有什么功能?ggplot(data = mpg, mapping = aes(x = cty, y = hwy)) +\n\n
geom_point() +\n\n
geom_abline() +\n\n
coord_fixed()\n10. The layered grammar of graphics在前面的章节中,你学到的不仅仅是如何制作散点图,条形图和箱线图。 你学到的是一些最基础的知识,有了这些基础知识你就可以做任何图表。 为了看到这一点,我们在我们的代码模板中添加位置调整参数,统计信息,坐标系和faceting:ggplot(data = &DATA&) +\n\n
&GEOM_FUNCTION&(\n\n
mapping = aes(&MAPPINGS&),\n\n
stat = &STAT&,\n\n
position = &POSITION&\n\n
&COORDINATE_FUNCTION& +\n\n
&FACET_FUNCTION&\n我们的新模板需要七个参数,也就是模板中显示的括号中的单词。 在实践中,你很少需要提供所有七个参数来制作图表,因为ggplot2将为除数据,映射和geom函数之外的所有内容提供有用的默认值。模板中的七个参数组成了图表的语法,这是一个正式的用于 绘制图表的语法系统。 图表语法是基于以下几点构建而成,你可以通过数据集,几何图形,一组映射,统计量,位置调整,坐标系和faceting的组合来唯一的绘制一个图表。要了解它是如何工作的,请考虑如何从头构建一个基本图表:你可以从数据集开始,然后将其转换为想要显示的信息(通过统计功能)。接下来,你可以选择几何图形来表示转换后的数据中的每个观察值。 然后,你可以使用图形的各种特性来表示数据中的变量,再将变量值映射到图形上。然后,你将选择一个坐标系来放置图形。你将使用这些图形的位置(这本身就是一种视觉特性)来表示x和y变量的值。 到这一步,你已经创建了一个完整的图表,但是你还可以进一步调整坐标系中的各图形位置(a position adjustment)或将图形分割成子图(分面)。 你还可以通过添加一个或多个附加图层来扩展图表,其中每个附加图层都可以使用数据集,几何图形,一组映射,统计量和位置调整等参数信息。你可以使用此方法构建你能想到的任何图表。 换句话说,你可以使用本章中学到的代码模板构建成百上千个独特的图表。总结:翻译这篇文章花了大概20小时,收获很大,不仅是在文章的内容上,更多的是锻炼了一种静下心来看英文文献的能力。kaggle上有很多精彩的数据分析和建模的案例,不得不说这些资料的质量要远高于我们在百度上搜到的一些结果,所以想要学号数据分析,英文是必须要迈过的一个槛(也要利用好google翻译)。另外由于对数据可视化方面很感兴趣,也入手了一本大数据社群内前辈推荐的《ggolot2数据分析与图形艺术》,这本书对ggolot2的各项功能和函数有较为全面的讲解(打算简单读一遍然后当作字典来用),建议对这方面感兴趣的同学可以买回来看一看。ggplot2的优越性在于它创建了一套完整的绘图语法,相较于R自带的绘图语法,ggplot2使用起来更加简单明了,并且由于ggolot2是通过图层叠加的方式来绘图,所以它的灵活性也更大,但可惜目前ggplot2还只能用于绘制二维图表,希望能尽快推出三维图表的工具包。","state":"published","sourceUrl":"","pageCommentsCount":0,"canComment":false,"snapshotUrl":"","slug":,"publishedTime":"T07:52:21+08:00","url":"/p/","title":"关于ggplot2包的基本功能介绍(下)","summary":"7. Statistical transformations下面我们来看一下条形图。条形图看起来很简单,但却很有意思,因为它们揭示了一些图表中的微妙的信息。一个基本的条形图由geom-bar()语句来绘制。下面这幅图根据钻石数据组中的cut变量将其进行了分组。钻石数据组是ggplot2中…","reviewingCommentsCount":0,"meta":{"previous":null,"next":null},"commentPermission":"anyone","commentsCount":1,"likesCount":18}},"annotationDetail":null,"commentsCount":0,"likesCount":13,"FULLINFO":true}},"User":{"huang-rui-87-34":{"isFollowed":false,"name":"黄锐","headline":"","avatarUrl":"/415596edf0ce6a0728b1ed_s.jpg","isFollowing":false,"type":"people","slug":"huang-rui-87-34","bio":"","hash":"333c485b877de4bc2f9f4db157c00681","uid":00,"isOrg":false,"description":"","profileUrl":"/people/huang-rui-87-34","avatar":{"id":"415596edf0ce6a0728b1ed","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false,"badge":{"identity":null,"bestAnswerer":null}}},"Comment":{},"favlists":{}},"me":{},"global":{"experimentFeatures":{"ge3":"ge3_9","ge2":"ge2_1","nwebStickySidebar":"sticky","nwebAnswerRecommendLive":"newVersion","newMore":"new","sendZaMonitor":"true","liveReviewBuyBar":"live_review_buy_bar_2","liveStore":"ls_a2_b2_c1_f2","homeUi2":"default","answerRelatedReadings":"qa_recommend_by_algo_related_with_article","qrcodeLogin":"qrcode","newBuyBar":"liveoldbuy","newMobileColumnAppheader":"new_header","zcmLighting":"zcm","favAct":"default","appStoreRateDialog":"close","mobileQaPageProxyHeifetz":"m_qa_page_nweb","iOSNewestVersion":"4.2.0","default":"None","wechatShareModal":"wechat_share_modal_show","qaStickySidebar":"sticky_sidebar","androidProfilePanel":"panel_b"}},"columns":{"next":{},"c_":{"following":false,"canManage":false,"href":"/api/columns/c_","name":"黄锐","creator":{"slug":"huang-rui-87-34"},"url":"/c_","slug":"c_","avatar":{"id":"v2-4d9b5275925cdfa9ceb2e5","template":"/{id}_{size}.jpg"}}},"columnPosts":{},"columnSettings":{"colomnAuthor":[],"uploadAvatarDetails":"","contributeRequests":[],"contributeRequestsTotalCount":0,"inviteAuthor":""},"postComments":{},"postReviewComments":{"comments":[],"newComments":[],"hasMore":true},"favlistsByUser":{},"favlistRelations":{},"promotions":{},"switches":{"couldAddVideo":false},"draft":{"titleImage":"","titleImageSize":{},"isTitleImageFullScreen":false,"canTitleImageFullScreen":false,"title":"","titleImageUploading":false,"error":"","content":"","draftLoading":false,"globalLoading":false,"pendingVideo":{"resource":null,"error":null}},"drafts":{"draftsList":[],"next":{}},"config":{"userNotBindPhoneTipString":{}},"recommendPosts":{"articleRecommendations":[],"columnRecommendations":[]},"env":{"edition":{},"isAppView":false,"appViewConfig":{"content_padding_top":128,"content_padding_bottom":56,"content_padding_left":16,"content_padding_right":16,"title_font_size":22,"body_font_size":16,"is_dark_theme":false,"can_auto_load_image":true,"app_info":"OS=iOS"},"isApp":false},"sys":{},"message":{"newCount":0},"pushNotification":{"newCount":0}}}

我要回帖

更多关于 微信登录数据载入失败 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信