R语言绘图之ggplot2包

6月份一直在忙期末考试,今天来迅速的学习下ggplot2包的简单绘图。
R的基础包里面也有很多画图函数,例如plot();barplot();qqplot();
但是还有大名鼎鼎的ggplot2包,用这个包的函数画出的图比较漂亮,而且使用灵活。

在ggplot的官方手册中提及到, 一张统计图形是由从数据几何对象(geometric object,记为geom,如点,线,条形等),图形属性(aesthetic attributes,记为aes,如颜色,形状,大小)的一个映射。除此以外,图形还可以包含了数据的统计变换(statistical transformation, 记写为stats)。最后,绘画在某个坐标系中(coordinate system, 记为coord),而分面(facet,将绘图窗口分成若干个子窗口)是用来生成数据中不同子集的图形
先介绍下它的基本元素:

  • 数据与映射
  • 几何对象geom
  • 统计变化stats
  • 标度
  • 坐标系coord
  • 分面facet
    这些组件之间是通过“+”, 以图层(layer)的方式来粘合构图的, 所以图层是ggplot2中一个重要的概念。
    以下用的数据是一份毕业生数据,来自王斌会主编的《数据分析与R语言建模》的练习数据,一共48个样本点,9个属性
    一、数据
    在ggplot2中,接受的数据集必须是以data.frame格式的。这种格式易于保存数据,而且能在保留原有的绘图参数下, 用%+%方便地变更已有数据集。
library("ggplot2")#调用包
UG=read.table("clipboard",header=T);
head(UG)
p=ggplot(UG,aes(score,income),color=sex)+geom_point()
UG.c=transform(UG,income=income*1.5)#将收入放大1.5倍,其他不变
p %+%UG.c

第一张
收入放大1.5倍的

二、映射
aes()函数是ggplot2中的映射函数, 映射是数据集中的数据关联到相应的图形属性过程中一种对应关系

1.映射的概念

>p=ggplot(UG,aes(score,income,color=sex))+geom_point()
> summary(p)
data: id, name, sex, region, birth, income, height, weight, score[48x9]
mapping:  x = score, y = income, colour = sex
> p1=ggplot(data=UG)
> summary(p1)
data: id, name, sex, region, birth, income, height, weight, score[48x9]

可以发现,在p中指定了x轴为score,y轴为income,颜色为sex,这与p1中的不同

2.设定与映射
映射将一个变量中离散或连续的数据与一个图形属性中以不同的参数来相互关联, 而设定能够将这个变量中所有的数据统一为一个图形属性。

p2=ggplot(UG,aes(score,income))
p2+geom_point(color="blue")#设定散点的颜色为蓝色
p2+geom_point(aes(color="blue"))

设定为蓝色点
出现错误
最后一句出现了错误,是因为在aes中, color = “blue”的实际意思是把”blue”当为一个变量, 用这个变量里的数据去关联图形属性中的参数, 而”blue”只含有一个字符变量, 默认情况下为离散变量, 按默认的颜色标度标记为桃红色

比较以下三种方法

ggplot(UG,aes(score,income),colour=sex)+geom_point()
ggplot(UG,aes(score,income,colour=sex))+geom_point()
ggplot(UG,aes(score,income))+geom_point(aes(colour=sex)) 

第一种的点是黑色点,第二种和第三种都是按照性别这个变量分颜色,第三种比较好记忆,相当于先画好图,再加上带颜色的散点。

3.分组
是ggplot2种映射关系的一种, 默认情况下ggplot2把所有观测点分为了一组, 如果需要把观测点按额外的离散变量进行分组处理, 必须修改默认的分组设置。

三、图层
1.在几何对象中设定映射
我们可以在在ggplot()中设定了映射了关系, 这种映射关系是默认的, 也可以在后面的几何对象中沿用已设定的默认映射关系, 也可以随时在几何对象中进行更改。
下面用到一个diamonds数据集,这个数据集的样本数非常大,所以要先抽样,这样画出的图才比较好看。

data(diamonds)
head(diamonds)
set.seed(74)#设定随机种子
small.diamonds=diamonds[sample(nrow(diamonds),500),]
#提取数据
head(small.diamonds)
dp =ggplot(small.diamonds, aes(x = carat, y = price, color = factor(color)))#设定默认的映射关系
dp + geom_point()#沿用默认的映射关系来绘制散点图
dp + geom_point(aes(shape = factor(cut))) #添加图层中的shape的映射关系
dp + geom_point(aes(y = cut)) #修改默认的y的映射关系, 注意图中y轴名称仍然以默认的price表示
dp + geom_point(aes(color = NULL))#删除默认的color映射关系

按照钻石的颜色分类不同颜色的散点
既有钻石颜色,又有钻石切割的分类
钻石颜色
去掉各种颜色的映射关系

注意体会第二和第三种图的画法
四、几何对象

dp =ggplot(small.diamonds, mapping=aes(x =carat, y = price,shape=cut,color = factor(color)))#设定默认的映射关系
dp + geom_point()

前面的钻石数据集的第二幅图也可以用这两个语句搞定,这里有点区别在于前面的是先画好了ggplot,再加上不同映射的散点;而这里是先画好了带有不同映射的ggplot,再加上点就好。

1.直方图

#直方图
ggplot(small.diamonds)+geom_histogram(aes(x=price))

直方图
还可以按照不同的变量填充不同色,比如切工、钻石颜色

ggplot(small.diamonds)+geom_histogram(aes(x=price,fill=cut))
ggplot(small.diamonds)+geom_histogram(aes(x=price,fill=color))

按照不同切工分配颜色
按照不同颜色的钻石分配颜色

2.柱形图

#柱形图,按照不同的变量
ggplot(small.diamonds)+geom_bar(aes(x=clarity))
ggplot(small.diamonds)+geom_bar(aes(x=color))

这里写图片描述
这里写图片描述
注意直方图和柱形图的区别:直方图把连续型的数据按照一个个等长的分区(bin)来切分,然后计数,画柱状图。而柱状图是分类数据,按类别计数

3.密度函数图

#密度函数图
ggplot(small.diamonds)+geom_density(aes(x=price,color=clarity))#color指定颜色
ggplot(small.diamonds)+geom_density(aes(x=price,fill=cut))#fill在下方填充

这里写图片描述
这里写图片描述

4.箱线图

#箱线图
ggplot(small.diamonds)+geom_boxplot(aes(x=cut,y=price,fill=clarity))

这里写图片描述

在ggplot中还有许多geom_xxx的函数,

geom_abline geom_area
geom_bar geom_bin2d
geom_blank geom_boxplot
geom_contour geom_crossbar
geom_density geom_density2d
geom_dotplot geom_errorbar
geom_errorbarh geom_freqpoly
geom_hex geom_histogram
geom_hline geom_jitter
geom_line geom_linerange
geom_map geom_path
geom_point geom_pointrange
geom_polygon geom_quantile
geom_raster geom_rect
geom_ribbon geom_rug
geom_segment geom_smooth
geom_step geom_text
geom_tile geom_violin
geom_vline

五、标度

#标度
>ggplot(small.diamonds)+geom_point(aes(x=carat,y=price,shape=cut,color=color))
>ggplot(small.diamonds)+geom_point(aes(x=carat,y=price,shape=cut,color=color))+scale_y_log10()+scale_color_manual(values=rainbow(7))#对y变量做了对数变换

对比下两中做法
没有标度变换
做了对数变换,而且取色也做了变换

六、统计变换
统计变换对原始数据进行某种计算,然后在图上表示出来。

例如对散点图上加一条回归线

#统计变换
ggplot(small.diamonds,aes(x=carat,y=price))+geom_point()+scale_y_log10()+stat_smooth()

这里写图片描述

还有一些统计变换可选的,如下表

stat_ablinestat_identity
stat_binstat_qq
stat_bin2dstat_quantile
stat_bindotstat_smooth
stat_binhexstat_spoke
stat_boxplotstat_sum
stat_contourstat_summary
stat_densitystat_summary2d
stat_density2dstat_summary_hex
stat_ecdfstat_unique
stat_functionstat_vline
stat_hlinestat_ydensity

七、坐标系统
1.用coord_flip()实现坐标轴翻转

#坐标系统
ggplot(small.diamonds,aes(x=clarity,fill=clarity))+geom_bar()
ggplot(small.diamonds,aes(x=clarity,fill=clarity))+geom_bar()+coord_flip()

这里写图片描述
这里写图片描述

2.用coord_polar()实现转换极坐标

#极坐标
>ggplot(small.diamonds)+geom_bar(aes(x=factor(1),fill=cut))+coord_polar(theta="y")
#x其实是上面的clarity,是一个因子变量

这里写图片描述
其实,可以看出,极坐标下的条形图就是饼图。

#靶心图
ggplot(small.diamonds)+geom_bar(aes(x=factor(1),fill=cut))+coord_polar()

这里写图片描述

#风玫瑰图
ggplot(small.diamonds)+geom_bar(aes(x=clarity,fill=cut))+coord_pola

这里写图片描述

八、分面(facet)
按照不同的透明度,分别回归(克拉和价格作回归),用分面

#分面,这是一行代码,这里特别注意,x和y的指定要放在ggplot中
>ggplot(small.diamonds,aes(x=carat,y=price,color=clarity))+geom_point()+scale_y_log10()+facet_wrap(~clarity)+stat_smooth()

这里写图片描述

九、主题
对图进行定制,如title, xlab, ylab显示出图标题,x轴,y轴,ggplot2提供了ggtitle(), xlab()和ylab()来实现。除此之外,我们可能还需要改变字体,字体大小,坐标轴,背景等各种元素,这需要通过theme()函数来完成。
ggplot2还提供一些已经写好的主题,如theme_grey()为默认主题,theme_bw()为白色背景的主题,还有theme_classic()主题

theme_economisttheme_economist_white
theme_wsjtheme_excel
theme_fewtheme_foundation
theme_igraytheme_solarized
theme_statatheme_tufte
#主题颜色
install.packages("ggthemes")
library("ggthemes")
ggplot(small.diamonds)+geom_boxplot(aes(x=cut,y=price,fill=clarity))+theme_wsj()

ggplot的一些基本的都介绍完毕了,关键是要实践应用!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/35171.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据分析——R语言中ggplot2用法(1)

备忘录地址(用来查询一些参数) https://www.maths.usyd.edu.au/u/UG/SM/STAT3022/r/current/Misc/data-visualization-2.1.pdf R语言软件参数 R3.6.0 安装包、导入包 install.package(ggplot) library(ggplot)首先加载数据集 这里用的是示例数据&am…

R语言:ggplot2包详解及各类精美图形绘制

文章目录 1.1 Ggplot2介绍1.2 Ggplot2特点默认值迭代高级元素 1.3 Ggplot2映射组件layerScalecoordtheme 1.4 Ggplot2自带数据集1.5 Ggplot2组成部分1.6 美观性参数1.7 多子图绘制1.8 图形类型与函数1.9 曲线拟合1.10 箱线图1.11 频率直方图与密度曲线1.12 柱状图1.13 时间序列…

R语言学习—— ggplot2函数

最近在自学R语言,但是从纯粹的理论开始学习太慢了而且没有实操不太行,所以目前是在实际应用中查漏补缺,遇到什么临时学什么,然后把笔记都一一记录下啦。分享出来一边是方便自己查找,另一方面也是想方便和我一样入门的菜…

R语言可视化【ggplot2】

R语言可视化【ggplot2】 文章的文字/图片/代码部分/全部来源网络或学术论文或课件,文章会持续修缮更新,仅供学习使用。 目录 R语言可视化【ggplot2】 一、可视化介绍 二、不同情况适用的图形 类别比较: 数值关系: 数据分布…

马斯克成立XAI公司: 探索宇宙的真实本质

尊敬的读者朋友们,欢迎来到CSDN!我是CSDN博主,今天非常高兴为大家带来这篇文章,我们将一起探索马斯克成立xAI公司的意义和目标,以及这个活动的丰富内容。让我们一起踏上这场奇幻之旅! 【引言】 在科技界的…

2023年十大科技趋势预测【集锦:机构和GPT们的科技趋势预测,欢迎大家前来围观,看看谁预测得准~~~】

目录 2023年十大科技趋势预测——Claude+ 2023年十大科技趋势预测——GPT-4 1. 量子计算

不止ChatGPT,谷歌云 AI 方案早已厉兵秣马!

【本文由Cloud Ace整理发布,更多内容请访问 Cloud Ace 官网】 近日 ChatGPT 爆火,掀起热议,能聊天能写代码,还能写策划稿,AI 似乎已逐渐变得无所不能。 不过在 AI 对话上,谷歌早在17年就提出了 Dialogflow …

同声传译例子

效果: 准备开源中… 包括: 前端后端架构数据处理模型原理模型训练模型推理测试集评价方法&脚本部分数据

微信小程序 -- 获取语音,并将语音转为文字(插件:微信同声传译)

实现的功能是获取语音,并将语音转为文字,实现效果如下: 1. 小程序后台添加插件:微信同声传译 登录小程序后台:https://mp.weixin.qq.com 11. 设置 -> 第三方设置 -> 添加插件 12. 输入“微信同声传译”&#…

小程序使用微信同声传译进行语言播报(数字播报问题)

小程序使用微信同声传译进行语言播报(数字播报问题) 需求是产品提的 代码是我写的(没办法,卑微打工人) 废话不多说直接开始吧 首先在微信微信公众平台插件管理引入插件(微信同声传译插件地址)…

微信公众平台-设置-第三方设置-插件-搜不到微信同声传译插件

给小程序添加插件,按照官方的方法在插件那里搜不到微信同声传译插件 只好去微信服务平台搜一下 找到了微信同声传译,登录后选择给哪个小程序添加,添加成功后去小程序的微信公众平台看已经添加成功了,而且是已通过状态。

电影、音频同声传译教程(免费实现)

实现思路 实时语音转写(需要申请一个在线的语音转写api接口)实时文字翻译(需要申请一个即时翻译的api接口) 实现 申请阿里云的语音转写api 阿里云网址:https://cn.aliyun.com/ 注册:用支付宝扫码注册即…

python实现免费同声传译 (离线语音识别+免费翻译接口+系统声音录制)

前言 前段时间碰到个英文面试,结果差点因为听不懂美式发音的python(派送)而GG了。。。我一直说的都是"派森"。。。所以就有个想法,英文电话会议的时候是不是可以做一个实时翻译的小工具,这样就可以给我这样…

uni-app 微信同声传译,实现AI语音功能(语音转文字,文字转语音,英汉互译

uni-app 微信同声传译,实现AI语音功能(语音转文字,文字转语音,英汉互译) 一:添加插件1、登录微信公众号平台,进入左边导航栏的设置,选择第三方设置,,添加插件…

小程序之定位语音识别=>插件:微信同声传译

说明:文章部分内容及图片出自网络,如有侵权请与我本人联系(主页有公众号:小攻城狮学前端) 作者:小只前端攻城狮、 主页:小只前端攻城狮的主页、 首发:掘金 GitHub:P-J27、 CSDN:PJ想做前端攻城狮 著作权归作…

关于使用微信同声传译报错的问题

最近开发微信小程序,需要用到语音识别的功能,于是就用了微信官方的微信同声传译的插件,但是使用的时候报错了,我使用了云开发,后来经过这是误报,可以忽略,类似的报错也是可以忽略的

百度新突破:AI同声传译系统STACL,可预测,低延迟

文章来源:ATYUN AI平台 百度开发了新的AI系统,名为同声传译和预期与可控延迟(STACL),百度声称这代表了自然语言处理的重大突破。 与大多数AI翻译系统不同,STACL能够在演讲者讲话后几秒钟开始翻译&#x…

语音识别+语音合成+同声传译 微信小程序

语音识别语音合成同声传译 微信小程序 代码库链接为:https://github.com/Resulte/SpeechProcessMiniProgram (希望您去Github的时候顺便给个Star) 项目预览 扫描下方小程序码,即可查看预览: 主页 语音识别 #### 语…

“同声传译”的难度有多大?

同声传译,简称“同传”,又称“同声翻译”、“同步口译”,是指译员在不打断讲话者讲话的情况下,不间断地将内容口译给听众的一种翻译方式。 同声传译作为一种翻译方式,其最大特点在于效率高,原文与译文翻译…

小程序=》添加同声传译插件,做简单的播放文本功能

一、进入小程序管理后台,菜单拉到最底下的“设置” 二、设置》第三方设置》插件管理》添加插件,输入“微信同声传译”即可添加 三、修改app.json文件,plugins节点下增加 "WechatSI": {"version": "0.3.5",&qu…