如何用ggplot2下载做文字可视化

ggmap:使用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":{"":{"title":"ggmap:使用ggplot2进行空间可视化绘图(中篇)","author":"li-bo-90-94","content":"作者:戴维 · 卡尔&哈德利·威克姆翻译:李博原文地址:PS:由于原文较长,故翻译分为三次进行。06.ggmap 函数只要get_map抓取了有意思的地图,ggmap就可以绘制了。get_map抓取的结果是一个特殊类别的栅格(raster)对象(一个十六进制字符串的颜色矩阵)paris &- get_map(location = \"paris\")\nstr(paris)\nqmap(baylor, zoom = 14, maptype = 53428, api_key = api_key,\nsource = \"cloudmade\")\nqmap(\"houston\", zoom = 10, maptype = 58916, api_key = api_key,\nsource = \"cloudmade\")\n\nchr [1:0] \"#C6DAB6\" \"#C2D6B3\" \"#C2D6B3\" ...\n- attr(*, \"class\")= chr [1:2] \"ggmap\" \"raster\"\n- attr(*, \"bb\")=’data.frame’: 1 obs. of 4 variables:\n..$ ll.lat: num 48.6\n..$ ll.lon: num 1.91\n..$ ur.lat: num 49.1\n..$ ur.lon: num 2.79\n图6:两千万用户制作的CloudMade地图样式。左图与图3和图5相当,右图包含图4中的水域。(图1—图5,参考上篇)以下为个人加入内容(代码):##下面的地址链接表明了图片的位置\n& paris &- get_map(location = \"paris\")\nMap from URL : /maps/api/staticmap?center=paris&zoom=10&size=640x640&scale=2&maptype=terrain&language=en-EN&sensor=false\nInformation from URL : /maps/api/geocode/json?address=paris&sensor=false\n& str(paris)#这里需要掌握str()函数的用法,即用于紧凑的显示任意R对象结构\n chr [1:0] \"#CBE5A2\" \"#CBE5A2\" \"#C8E3A1\" \"#C8E3A1\" \"#C8E09D\" \"#C3DD9D\" ...\n - attr(*, \"class\")= chr [1:2] \"ggmap\" \"raster\"\n - attr(*, \"bb\")='data.frame':
4 variables:\n
..$ ll.lat: num 48.6\n
..$ ll.lon: num 1.91\n
..$ ur.lat: num 49.1\n
..$ ur.lon: num 2.79\n - attr(*, \"source\")= chr \"google\"\n - attr(*, \"maptype\")= chr \"terrain\"\n - attr(*, \"zoom\")= num 10\n&\nggmap的目的是把地图从栅格对象中输出到屏幕,并通过创建一个ggplot对象来实现这一目的。图像打印时,在图形设备中绘制所需的地图。如图7所示。图7而ggmap需要一个ggmap对象,它接受一小部分参数——范围,底图(base_layer),距离(maprange),图例,填充和亮度。若无这些附加参数,则ggmap有效返回以下ggplot对象。ggplot(aes(x = lon, y = lat), data = fourCorners) +\ngeom_blank() + coord_map(\"mercator\") +\nannotation_raster(ggmap, xmin, xmax, ymin, ymax)\n其中fourCorners是,将expand.grid应用于ggmap对象的bb属性中,并指定的经纬度范围产生的数据集。因此,由ggmap创建的ggplot2对象的默认底图(即原始画框)是,ggplot(aes(x = lon,y = lat),data = fourCorners),默认的x、y轴是根据地图的纬度范围计算而来。范围参数指定地图覆盖了多少图形范围。它接受三个字符串:图7所示的“normal(标准)”,图10和图12所示的“panel(面板)”和每个图中所示的“device(图案)”。“normal”通过ggplot2提供默认坐标来定位地图,因此可以看到它后面的面板。 “panel”则将绘图面板的极限设置为scale_ [x,y] _continuous(expand = c(0,0)))的地图的经纬度范围。而“device”则通过使用新的theme_nothing命令,将这一功能用到了极致。base_layer是一个将默认基本层替换为用户要求的命令。因此,在上述代码中,用户可以将ggplot(aes(x = lon,y = lat),data = fourCorners)更改为不同的命令。由于ggplot2函数中facet_wrap和facet_grid处于基础层,因此这对于 faceting plots(局部小块绘图)非常重要。同时,由于更改基本层会改变基本尺度并因此改变绘图的范围,所以当基本层改变时,只有部分地图可见。将maprange参数设置为TRUE(默认为FALSE),并通过ggmap对象本身的bb属性确定x和y轴(经度和纬度),而不是base_layer参数。ggmap(paris, extent = \"normal\")\n图7:在ggmap中设置extent =“normal”,说明ggmap中的地图和ggplot2绘制图形的相似性。ggmap有关说明性的参数是图例和填充,它们只适用于extent =“device”。图例参数确定了在地图上绘制图例的位置。它的选项是“left”,“right”(默认),“bottom”,“top”,“topleft”,“bottomleft”,“topright”,“bottomright”和“none”。前四个根据ggplot2的标准规格(没有任何轴)绘制图例;后四个绘制地图上的图例就像ArcGIS(一个可伸缩的,全面的GIS平台)一样;最后的“none”用于减去图例。填充控制主要是定义图例应该绘制在距离边角多远的地方。亮度参数,是由Jean-Olivier Irisson提出的一个建议,用于调整图像色彩。默认值c(0,“black”)表示完全半透明的黑色层,即完全没有色彩。通常情况下,第一个参数对应于alpha混合(0 =不可见(invisible),1 =不透明(opaque)),第二个参数是色调的颜色。如果只有一个数字被提供给ggmap(假定一个黑色色彩的亮度参数),色调本身是通过在地图的上添加一个geom_rect层来制作的。图2提供了一个例子,其中黑色色彩被添加到地图以增强点的可视性。由于ggmap返回一个ggplot对象,ggmap的输出本身可以作为ggplot2框架中的基础层。这是一个非常难得的重要的实现——它允许ggplot2的全部功能。我们现在通过在德克萨斯州休斯顿市中心的一个暴力犯罪案例研究来说明这些方法的有效性 。07.ggmap实践数据data犯罪数据是由休斯顿警察局的网站,在2010年1月至 8月期间汇编的。使用plyr(韦翰,2011年)对这些数据进行了轻微的清理和汇总,同时使用了谷歌地图的地理编码;因此,完整的数据在ggmap中可用来作为犯罪数据集。& str(crime)\n’data.frame’: 86314 obs. of 17 variables:\n$ time : POSIXt, format: \" 0...\n$ date : chr \"1/1/2010\" \"1/1/2010\" \"1...\n$ hour : int 0 0 0 0 0 0 0 0 0 0 ...\n$ premise : chr \"18A\" \"13R\" \"20R\" \"20R\" ...\n$ offense : chr \"murder\" \"robbery\" \"aggr...\n$ beat : chr \"15E30\" \"13D10\" \"16E20\" ...\n$ block : chr \"\" \"\" ...\n$ street : chr \"marlive\" \"telephone\" \"w...\n$ type : chr \"ln\" \"rd\" \"ln\" \"st\" ...\n$ suffix : chr \"-\" \"-\" \"-\" \"-\" ...\n$ number : int 1 1 1 1 1 1 1 1 1 1 ...\n$ month : Factor w/ 12 levels \"january\"...\n$ day : Factor w/ 7 levels \"monday\" ...\n$ location: chr \"apartment parking lot\" ...\n$ address : chr \"9650 marlive ln\" \"4750 ...\n$ lon : num -95.4 -95.3 -95.5 -95.4 ...\n$ lat : num 29.7 29.7 29.6 29.8 29.7...\n由于我们只对在市中心发生的暴力犯罪感兴趣,所以我们需要对数据进行一些设置限定。首先要确定一个地理位置的边界,使用gglocator,一个ggmap输出的类似于定位的函数ggplot2。 gglocator不仅用于ggmap绘图,而且可用于一般的ggplot2制图。##原文如下\n& # find a reasonable spatial extent(找到一个合理的空间范围)\n& qmap(’houston’, zoom = 13)\n& gglocator(2)\n& lon lat\n& 1 -95.00\n& 2 -95.31\n&\n& # only violent crimes(仅限暴力犯罪)\n& violent_crimes &- subset(crime,\n+ offense != \"auto theft\" & offense != \"theft\" & offense != \"burglary\")\n&\n& # order violent crimes(攻击性暴力犯罪)\n& violent_crimes$offense &- factor(violent_crimes$offense,\n+ levels = c(\"robbery\", \"aggravated assault\", \"rape\", \"murder\"))\n&\n& # restrict to downtown(市中心范围)\n& violent_crimes &- subset(violent_crimes,\n+ -95.39681 &= lon & lon &= -95.34188 &\n+ 29.73631 &= lat & lat &= 29.78400)\n分析只涉及严重伤害袭击,抢劫,强奸和谋杀的暴力犯罪数据。请注意,尽管为确保数据的质量做出了一些努力,但是数据还是被轻微清理,同时数据集可能仍然包含错误。08.分析第一步,我们能做的是看看个体犯罪发生的地方。通过模拟一些简单的ggplot2类型(主要是通过ggplot2具有导向功能的图例字体和键型),图8左侧包含生成显示空间气泡图的代码。泡泡图的其中一个问题是图的重叠和点的大小,我们不能依靠感觉去确定犯罪的发生地。处理这一问题的一个方法是将点分开,并剔除没有任何样本的点。(图8右图)向我们展示了犯罪行为的发生情况。图8:休斯顿市中心的暴力犯罪泡泡图(左)和同样的箱图(右)theme_set(theme_bw(16))\nHoustonMap &- qmap(\"houston\", zoom = 14, color = \"bw\", legend = \"topleft\")\nHoustonMap +\ngeom_point(aes(x = lon, y = lat, colour = offense, size = offense),\ndata = violent_crimes)\nHoustonMap +\nstat_bin2d(\naes(x = lon, y = lat, colour = offense, fill = offense),\nsize = .5, bins = 30, alpha = 1/2,\ndata = violent_crimes\n)\n这个箱图是我们第一次开始在ggplot2框架中看到地图的情况。虽然它实际上并不是一个非常好的绘图,但它在说明ggplot2框架与地图的上下文信息中有很大优势 ——根据犯罪变量将数据框架暴力行为划分为块的过程,将每个地点的点数汇总到一个数据集,绘图最后由ggplot2在幕后完成。那么,一般暴力犯罪怎么办?如果我们忽略了犯罪的类型,我们可以通过使用轮廓图来了解暴力犯罪的空间分布。由于地图图像本身是基于ggplot2的annotation_raster,它没有绘制坐标,但我们可以访问添加的坐标,以形成一个填充的轮廓图。这在图9中看到(左图)。图9:暴力犯罪的轮廓图(左),加入一个小插图(右图右下角)。houston &- get_map(\"houston\", zoom = 14)\nHoustonMap &- ggmap(\"houston\", extent = \"device\", legend = \"topleft\")\nHoustonMap +\nstat_density2d(\naes(x = lon, y = lat, fill = ..level.., alpha = ..level..),\nsize = 2, bins = 4, data = violent_crimes,\ngeom = \"polygon\"\n)\noverlay &- stat_density2d(\naes(x = lon, y = lat, fill = ..level.., alpha = ..level..),\nbins = 4, geom = \"polygon\",\ndata = violent_crimes\n)\nHoustonMap + overlay + inset(\ngrob = ggplotGrob(ggplot() + overlay + theme_inset()),\nxmin = -95.35836, xmax = Inf, ymin = -Inf, ymax = 29.75062\n)\n这种类型叠加图是非常有效,然而,他们传达信息的能力可能受到阻碍,即叠加图与地图本身存在的视觉混淆。这在使用彩色地图时尤其常见。为了解决这个问题,插图功能可以用于在白色背景上插入包含叠加层的地图插图,辅助轴线用于theme_inset函数实现的图例说明。这在图9(右图)中可以明显看到。同时,该图像表明有三个主要的热点活动。这三个中的每一个对应于休斯敦人经常活动且特别危险的地点。从东到西,热点是由(1)一个县监狱,每天释放囚犯两次,大量的囚犯在该区域活动,(2)在大量无家可归和贫困地区的商业公交车站, 3)一个卖淫窝点,处在城市繁华步行街地区。除了单个图,ggmap或qmap的base_layer参数允许小面绘图(见图10)。houston &- get_map(location = \"houston\", zoom = 14, color = \"bw\",\nsource = \"osm\")\nHoustonMap &- ggmap(houston, base_layer = ggplot(aes(x = lon, y = lat),\ndata = violent_crimes))\nHoustonMap +\nstat_density2d(aes(x = lon, y = lat, fill = ..level.., alpha = ..level..),\nbins = 5, geom = \"polygon\",\ndata = violent_crimes) +\nscale_fill_gradient(low = \"black\", high = \"red\") +\nfacet_wrap(~ day)\n图10:按天形成小型轮廓图这对于具有离散时间分量(日,月,季度,年等)的空间数据特别有用。最后一个绘图显示ggplot2中轮廓线的问题之一 ——“剪切”或“撕裂”的轮廓。除了这个直观现象(这可能在后续的ggplot2版本中可能会被修正),我们可以看到,实际上大多数暴力犯罪发生在星期一,其次是星期五。星期五的小图很容易解释——在市中心的酒吧区有一个小圆点,在西南部较大地区,夜生活较为活跃。而星期一的小图不是很容易解释。(未完待续)......","updated":"T11:48:05.000Z","canComment":false,"commentPermission":"anyone","commentCount":7,"collapsedCount":0,"likeCount":14,"state":"published","isLiked":false,"slug":"","isTitleImageFullScreen":false,"rating":"none","titleImage":"/v2-63adcc9d4daaa4441cd1_r.jpg","links":{"comments":"/api/posts//comments"},"reviewers":[],"topics":[{"url":"/topic/","id":"","name":"R(编程语言)"},{"url":"/topic/","id":"","name":"大数据"},{"url":"/topic/","id":"","name":"翻译"}],"adminClosedComment":false,"titleImageSize":{"width":869,"height":434},"href":"/api/posts/","excerptTitle":"","tipjarState":"inactivated","annotationAction":[],"sourceUrl":"","pageCommentsCount":7,"snapshotUrl":"","publishedTime":"T19:48:05+08:00","url":"/p/","lastestLikers":[{"bio":"113号元素","isFollowing":false,"hash":"b29a4e5f920c921ca515f9","uid":775100,"isOrg":false,"slug":"nihonium","isFollowed":false,"description":"地球科学","name":"nihonium","profileUrl":"/people/nihonium","avatar":{"id":"v2-271b57cdbcce","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},{"bio":"小白学数据。","isFollowing":false,"hash":"cf4dbfe60e66487dcf049c0","uid":966100,"isOrg":false,"slug":"chang-xu-52","isFollowed":false,"description":"","name":"常旭","profileUrl":"/people/chang-xu-52","avatar":{"id":"v2-236aae218f4f849acfffa6","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},{"bio":"糟糕本科生","isFollowing":false,"hash":"eeedcfa18ced958bfbb7a","uid":671700,"isOrg":false,"slug":"hu-tong-xue-70-18","isFollowed":false,"description":"","name":"胡同学","profileUrl":"/people/hu-tong-xue-70-18","avatar":{"id":"da8e974dc","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},{"bio":"垂死挣扎中","isFollowing":false,"hash":"f44db749b4d25aecc6e9","uid":465200,"isOrg":false,"slug":"Mark_zw","isFollowed":false,"description":"分析","name":"Mark","profileUrl":"/people/Mark_zw","avatar":{"id":"v2-6ed3e4649aab3a141ad523ca","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},{"bio":"摄影骑行爱好者,氷学研究者,神经生物学博士","isFollowing":false,"hash":"eba44a08c4","uid":88,"isOrg":false,"slug":"qian-fan-tian-sha-tang","isFollowed":false,"description":"求知","name":"千反田砂糖","profileUrl":"/people/qian-fan-tian-sha-tang","avatar":{"id":"v2-93eb24be125","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false}],"summary":"作者:戴维 · 卡尔&哈德利·威克姆翻译:李博 原文地址:PS:由于原文较长,故翻译分为三次进行。 06.ggmap 函数只要get_map抓取了有意思的地图,ggmap就可以绘制了。get_map抓取的结果是一个特殊类别的栅格(ra…","reviewingCommentsCount":0,"meta":{"previous":null,"next":null},"annotationDetail":null,"commentsCount":7,"likesCount":14,"FULLINFO":true}},"User":{"li-bo-90-94":{"isFollowed":false,"name":"李博","headline":"","avatarUrl":"/v2-dfe2d16bc9f4c47d5e898ea452f8e507_s.jpg","isFollowing":false,"type":"people","slug":"li-bo-90-94","bio":"囚徒健身","hash":"885f636d1307baab6849b","uid":442500,"isOrg":false,"description":"","profileUrl":"/people/li-bo-90-94","avatar":{"id":"v2-dfe2d16bc9f4c47d5e898ea452f8e507","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false,"badge":{"identity":null,"bestAnswerer":null}}},"Comment":{},"favlists":{}},"me":{},"global":{},"columns":{},"columnPosts":{},"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}},"config":{"userNotBindPhoneTipString":{}},"recommendPosts":{"articleRecommendations":[],"columnRecommendations":[]},"env":{"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":{}}苹果/安卓/wp
积分 299, 距离下一级还需 151 积分
权限: 自定义头衔, 签名中使用图片
道具: 彩虹炫, 涂鸦板, 雷达卡, 热点灯, 金钱卡, 显身卡, 匿名卡下一级可获得
道具: 抢沙发
购买后可立即获得
权限: 隐身
道具: 金钱卡, 彩虹炫, 雷达卡, 热点灯, 涂鸦板
开心签到天数: 128 天连续签到: 1 天[LV.7]常住居民III
本书由Winston Chang著,肖楠、邓一硕、魏太云翻译
本书侧重于解决具体问题,绝大数绘图案例都是用R包ggplot2实现的,而且本书不仅仅局限于ggplot2的介绍,本书还介绍了其他绘图工具和函数,旨在让读者找到合适的工具解决不同的问题。
全书有15章节,共317页
支持楼主:、
购买后,论坛将奖励 10 元论坛资金给楼主,以表示您对TA发好贴的支持
载入中......
(407.03 KB)
17:41:28 上传
(450.15 KB)
17:41:28 上传
(301.03 KB)
17:41:27 上传
(278.78 KB)
17:41:26 上传
(297.04 KB)
17:41:26 上传
(194.68 KB)
17:41:25 上传
(276.77 KB)
17:41:25 上传
(264.12 KB)
17:41:24 上传
(240.93 KB)
17:41:20 上传
(206.87 KB)
17:41:19 上传
(329.9 KB)
17:41:19 上传
(293.74 KB)
17:41:18 上传
(325.98 KB)
17:41:18 上传
(386.22 KB)
17:41:17 上传
(306.28 KB)
17:41:13 上传
(290.26 KB)
17:23:45 上传
17:44:16 上传
售价: 15 个论坛币
用于学习ggplot2等绘图工具
总评分:&学术水平 + 2&
热心指数 + 2&
信用等级 + 2&
本帖被以下文库推荐
& |主题: 608, 订阅: 152
& |主题: 384, 订阅: 138
太感激了& &谢分享
有这本书,再下载一个电子版,哈哈
总评分:&经验 + 20&
支持分享。
很好,谢谢分享!
<font color="#9133372 发表于
本书由Winston Chang著,肖楠、邓一硕、魏太云翻译
本书侧重于解决具体问题,绝大数绘图案例都是用R包ggp ...谢谢楼主!很有用!
总评分:&经验 + 20&
请问这个是可复制的版本吗?
总评分:&经验 + 20&
太感谢了!
总评分:&经验 + 20&
总评分:&经验 + 20&
好东东啊,就是太贵了!
总评分:&经验 + 20&
初级热心勋章
初级热心勋章
初级学术勋章
初级学术勋章
初级信用勋章
初级信用勋章
中级热心勋章
中级热心勋章
中级学术勋章
中级学术勋章
中级信用勋章
中级信用勋章
高级学术勋章
高级学术勋章
高级热心勋章
高级热心勋章
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
如有投资本站或合作意向,请联系(010-);
邮箱:service@pinggu.org
投诉或不良信息处理:(010-)
论坛法律顾问:王进律师医学会议频道
聚焦转化医学和多学科融合
MedSci梅斯医学APP下载
大家还在关注:
10个问题助你精通R作图包ggplot2 package
作者:Manish saraswat&&&来源:36大数据 译
还没入门,感觉命令语句难懂
请问,有数据吗,不好练习的
很实用,ggplot2
很实用,ggplot2
很实用,ggplot2
很实用,ggplot2
相关资讯:
猜你感兴趣
资讯分类阅读
关注Medsci
声明:MedSci(梅斯医学)登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。文章内容仅供专业医生参考,具体诊断和治疗请咨询专科医生。
MedSci备案号
扫码领取IF曲线
IF连续增长的期刊全栈 - 13 ggplot2 在R中进行可视化 - 简书
全栈 - 13 ggplot2 在R中进行可视化
这是全栈数据工程师养成攻略系列教程的第十三期:13 ggplot2 在R中进行可视化。
我们已经具备了一定的代码基础,现在不妨来了解下数据可视化,从生动的图形中更好地感受数据之美。R是一门统计分析语言,和Python一样,语法简单并且有非常丰富的功能包,其中的ggplot2包便可以用简洁的语法绘制出美观多样的图形。
下载和安装
如果没有R的话需要去下载并安装,在R的官网中找到下载链接,选择最近的镜像地址下载即可,。安装完毕后即可运行R,软件如下图所示,界面比较简单,提供的用户图形化接口十分有限。
因此可以再安装一个叫作RStudio的软件,它基于R的内核提供了更佳丰富的用户图形化操作界面,使用起来更方便,用户体验更好。可以在RStudio的官网找到下载链接,下载并安装RStudio,。安装完毕后运行RStudio,软件界面如下图所示。
左上角的两个按钮分别用于新建各种文件和打开已有文件,左边是一个交互命令行,可以交互式地执行代码。右边上半部分是环境窗口(Environment)和历史窗口(History),分别可以查看当前编程环境中已有的变量,以及查看历史命令记录。右边下半部分包括文件(Files)、绘图(Plots)、包(Packages)、帮助(Help)等标签页,分别用于查看文件目录、查看绘图结果、查看引用的包、查看帮助文档。
例如,在左边的交互命令行中输入?plot并回车,即可在右边的Help中查看plot函数的使用文档。再输入a &- 1并回车,即可在右边的Environment中看到已有的变量,同时在History中也可以看到之前执行的两条命令记录。
安装包和加载包
R和Python一样,功能之所以强大是因为它具备丰富多样的功能包。在R中使用以下命令即可安装一个新的包,例如ggplot2,包的名字需要用引号括起来。
install.packages("ggplot2")
功能包安装完毕之后,即可加载并使用其提供的数据集、函数和功能,使用以下命令加载一个功能包,包的名字不需要用引号括起来。
library(ggplot2)
R中的数据结构主要有向量、矩阵、数组、数据框、因子和列表。
向量是用于存储数值型、字符型或逻辑型数据的一维数组,单个向量中的数据必须拥有相同的类型或模式,即要么都是数值型,要么都是字符型,要么都是逻辑型。可以发现,R中的赋值使用箭头符号&-,而不是其他语言常用的=。
a &- c(1, 2, 5, 3, 6, -2, 4)
b &- c("one", "two", "three")
c &- c(TRUE, TRUE, TRUE, FALSE, TRUE, FALSE)
用方括号可以访问向量中的元素,例如访问向量a中的第二个和第四个元素,可以用a[c(2, 4)]。向量也支持支持冒号语法,a[2:6]将返回a的第二至第六个元素。所以向量的用法和Python中list有相似又不同,Python中list的下标从0开始,而且冒号语法只包括开始下标但不包括结束下标。另外Python中负号下标表示从后往前数,而向量中负号表示排除,例如a[-1]返回向量a中除了第一个以外的其他全部元素。
矩阵是一个二维数组,每个元素都拥有相同的类型,必须都为数值型、字符型或逻辑型,可通过函数matrix创建矩阵。
mymatrix &- matrix(vector, nrow=number_of_rows, ncol=number_of_columns, byrow=FALSE, dimnames=list(rownames, colnames))
其中vector向量包含了全部矩阵元素,nrow和ncol为行数和列数,byrow默认为FALSE表示按列填充,否则TRUE为按行填充,dimnames为行名和列名。使用时,只有前三个参数是必须的。
y &- matrix(1:20, nrow=5, ncol=4)
cell &- c(1, 26, 24, 68)
rnames &- c("R1", "R2")
cnames &- c("C1", "C2")
mymatrix &- matrix(cell, nrow=2, ncol=2, byrow=TRUE, dimnames=list(rnames, cnames))
mymatrix &- matrix(cell, nrow=2, ncol=2, byrow=FALSE, dimnames=list(rnames, cnames))
x[i,]表示矩阵x中的第i行,x[,j]表示矩阵x中的第j列,x[i, j]表示矩阵x中的第i行第j个元素,或者使用数值型向量代替i、j以同时选择多行或多列。
数组和矩阵类似,但是维度可以大于2,通过array函数创建。
myarray &- array(vector, dimensions, dimnames)
其中vector包含数组中的数据,dimensions是一个数值型向量,给出了各个维度下标的最大值,dimnames可选,以向量形式指定各个维度的名称。
dim1 &- c("A1", "A2")
dim2 &- c("B1", "B2", "B3")
dim3 &- c("C1", "C2", "C3", "C4")
z &- array(1:24, c(2, 3, 4), dimnames=list(dim1, dim2, dim3))
数据框可以理解成数据库中的表,即每一行表示一条记录,每一列表示一项字段。不同列可以包含不同类型,例如某一列为数值型而另一列为字符型,但每列所有行的数据类型必须相同。数据框通过data.frame创建,是R中最为重要的一种数据结构。
patientID &- c(1, 2, 3, 4)
age &- c(25, 34, 28, 52)
diabetes &- c("Type1", "Type2", "Type1", "Type1")
status &- c("Poor", "Improved", "Excellent", "Poor")
patientdata &- data.frame(patientID, age, diabetes, status)
访问数据框中的数据可以通过以下三种方式:
# 访问第一列和第二列
patientdata[1:2]
# 按列名访问,使用方括号和向量
patientdata[c("diabetes","status")]
# 按列名访问,使用$
patientdata$age
无序类别型变量和有序类别型变量在R中都称为因子。简单来说,因子就是一种离散值,例如性别只能是male和female,对应两个字符型因子,或者分别用0和1来表示,对应两个数值型因子。如果因子的不同水平之间存在排序关系,则称为有序因子。以下代码中,diabetes对于不同的人只能取Type1或Type2,因此是一个因子。
diabetes &- factor(c("Type1", "Type2", "Type1", "Type1"))
以下代码中,status对于不同的人只能取Poor、Improved或Excellent,同时三者之间存在排序关系,因此使用orderded=TRUE指定为一个有序因子。
status &- factor(c("Poor", "Improved", "Excellent", "Poor"), ordered=TRUE)
# 或者手动指定排序的顺序
status &- factor(c("Poor", "Improved", "Excellent", "Poor"), ordered=TRUE, levels=c("Poor", "Improved", "Excellent"))
列表和向量一样,同样是多个元素的排列,但每个元素可以是以上提及的任何数据结构,甚至是其他列表的组合,即嵌套列表。使用list定义一个列表,并可以为各个元素进行命名。
g &- "My First List"
h &- c(25, 26, 18, 39)
j &- matrix(1:10, nrow=5)
k &- c("one", "two", "three")
mylist &- list(title=g, ages=h, j, k)
可以看到mylist包括四个元素,使用mylist[[2]]、mylist$age或者mylist[["ages"]]访问其中的第二个元素。
最后需要注意的是,R中的变量名、行名、列名等名称,都尽量使用纯英文,避免使用中文导致错误。
R中提供了很多数据集,安装包也会提供一些额外的数据集,这些数据集大多以数据框的形式给出,例如mtcars数据集提供了32款车型的11项参数值,所有参数值都为数值型。
head(mtcars)
nrow(mtcars)
names(mtcars)
summary(mtcars)
另外,也可以从csv、txt等文件中读取数据为数据框,使用data.table包的fread()函数读取数据,例如之前提供的douban_movie_clean.txt。读取之前需要在Files标签页中找到数据文件,然后点击齿轮中的Set As Working Directory,将当前目录设为工作路径。
# 没有包则安装
# install.packages("data.table")
library(data.table)
douban_movie_clean &- fread("douban_movie_clean.txt", header=TRUE, sep="^", encoding="UTF-8")
除了在交互命令行中编写R代码,一种更方便的选择是使用R脚本,就如同新建一个.py代码,在Sublime中编辑完毕后再运行一样。点击左上角的新建文件按钮,选择R Script,在新建的R脚本中可以自由地编写多行代码。编写完毕后,选中全部或者部分代码,点击R脚本右上方的Run按钮,即可运行选中的代码。
ggplot2是R中的一个功能包,可以用简洁统一的语法绘制出美观多样的图形。安装好ggplot2之后,让我们通过一个简单的例子感受下ggplot2的魅力。
# 如果没有则安装
# install.packages("ggplot2")
library(ggplot2)
ggplot(douban_movie_clean) + geom_histogram(aes(x=length))
以上代码对豆瓣电影数据集的片长这一字段绘制直方图,横轴为电影片长,纵轴为每个片长区间的电影数量。绘图结果将显示在Plots标签页中,可以点击Zoom按钮放大图像,可以发现大多数电影的片长集中在90至120分钟之间。
如果对R感兴趣、希望进一步了解更多内容,可以访问我的博客,,以上链接以r为标签搜索相关文章,搜索结果中会有一个《R学习笔记》系列,共14篇文章,可作为进一步学习R的参考资料。
视频链接:
上海交通大学直博在读,热衷数据,业余时间混迹于各大数据竞赛

我要回帖

更多关于 ggplot2安装 的文章

 

随机推荐