R语言绘图之ggplot2包

(2018-09-25 03:09:30)

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 2 3

4 5 6 二、映射 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] 1 2 3 4 5 6 7 8

9 可以发现,在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")) 1 2 3 4 最后一句出现了错误,是因为在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)) 1 2 3

第一种的点是黑色点,第二种和第三种都是按照性别这个变量分颜色,第三种比较好记忆,相当于先画好图,再加上带颜色的散点。 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映射关系 1 2 3 4 5 6 7 8 9 10 11 12 注意体会第二和第三种图的画法

四、几何对象 dp =ggplot(small.diamonds, mapping=aes(x =carat, y =

price,shape=cut,color = factor(color)))#设定默认的映射关系 dp + geom_point()

1 2

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

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

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

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

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

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

ggplot(small.diamonds)+geom_bar(aes(x=color)) 1 2 3

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

3.密度函数图 #密度函数图

ggplot(small.diamonds)+geom_density(aes(x=price,color=clarity))#color指定颜色

ggplot(small.diamonds)+geom_density(aes(x=price,fill=cut))#fill在下方填充

1 2 3 4.箱线图 #箱线图

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

1 2 在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变量做了对数变换

1 2 3 对比下两中做法 六、统计变换 统计变换对原始数据进行某种计算,然后在图上表示出来。 例如对散点图上加一条回归线 #统计变换

ggplot(small.diamonds,aes(x=carat,y=price))+geom_point()+scale_y_log10()+stat_smooth()

1 2 还有一些统计变换可选的,如下表 stat_abline stat_identity stat_bin stat_qq

stat_bin2d stat_quantile stat_bindot stat_smooth stat_binhex

stat_spoke stat_boxplot stat_sum stat_contour stat_summary

stat_density stat_summary2d stat_density2d stat_summary_hex

stat_ecdf stat_unique stat_function stat_vline stat_hline

stat_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()

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

>ggplot(small.diamonds)+geom_bar(aes(x=factor(1),fill=cut))+coord_polar(theta="y")

#x其实是上面的clarity,是一个因子变量 1 2 3 其实,可以看出,极坐标下的条形图就是饼图。 #靶心图

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

1 2 #风玫瑰图

ggplot(small.diamonds)+geom_bar(aes(x=clarity,fill=cut))+coord_pola

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

#分面,这是一行代码,这里特别注意,x和y的指定要放在ggplot中

>ggplot(small.diamonds,aes(x=carat,y=price,color=clarity))+geom_point()+scale_y_log10()+facet_wrap(~clarity)+stat_smooth()

1 2 九、主题 对图进行定制,如title, xlab, ylab显示出图标题,x轴,y轴,ggplot2提供了ggtitle(),

xlab()和ylab()来实现。除此之外,我们可能还需要改变字体,字体大小,坐标轴,背景等各种元素,这需要通过theme()函数来完成。

ggplot2还提供一些已经写好的主题,如theme_grey()为默认主题,theme_bw()为白色背景的主题,还有theme_classic()主题

theme_economist theme_economist_white theme_wsj theme_excel

theme_few theme_foundation theme_igray theme_solarized theme_stata

theme_tufte #主题颜色 install.packages("ggthemes") library("ggthemes")

ggplot(small.diamonds)+geom_boxplot(aes(x=cut,y=price,fill=clarity))+theme_wsj()

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

--------------------- 本文来自 数挖实验室 的CSDN 博客

,全文地址请点击:https://blog.csdn.net/dollyh/article/details/74332208?utm_source=copy

分享:

喜欢

0

赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

r语言导入ggplot2_R语言绘图之ggplot2包相关推荐

  1. r语言导入ggplot2_R语言 可视化之三大绘图系统概述:base、lattice和ggplot2 | 第7讲...

    原文:R语言 可视化之三大绘图系统概述:base.lattice和ggplot2 | 第7讲 原创: 拴小林 数据驱动实践 1周前 数据可视化是数据分析过程中探索性分析的一部分内容,可以直观展示数据集 ...

  2. r语言导入ggplot2_R语言入门--画图(一)--ggplot2

    先写一些需要用到的知识点,比如包.函数 dplyr 很好用的包 经常与ggplot2连用 mutate:用于对数据框的列进行重新处理,或者用处理的结果添加新列 数据清洗: 1.na.omit()   ...

  3. r语言导入ggplot2_R语言教程:数据结构+导入数据!

    ↑↑↑   关注选刊说   ↑↑↑ 您的SCI选刊助手! 2.1 数据结构 数据集通常是由数据构成的一个矩形数组,行表示观测,列表示变量(但不同行业对行和列叫法不同,在R中用观测和变量代表行和列). ...

  4. R语言绘图之ggplot2包

    6月份一直在忙期末考试,今天来迅速的学习下ggplot2包的简单绘图. R的基础包里面也有很多画图函数,例如plot();barplot();qqplot(); 但是还有大名鼎鼎的ggplot2包,用 ...

  5. R语言可视化R原生plot函数与ggplot可视化结果组合、整合输出实战:原生R绘图plot函数可视化、ggplot2包可视化、R原生plot函数与ggplot可视化结果组合

    R语言可视化R原生plot函数与ggplot可视化结果组合.整合输出实战:原生R绘图plot函数可视化.ggplot2包可视化.R原生plot函数与ggplot可视化结果组合 目录

  6. r语言导入ggplot2_【ggplot2】R语言:ggplot2包

    原标题:[ggplot2]R语言:ggplot2包 1 如何使用ggplot2包绘制高质量图画? 我们将学习R中最受欢迎的软件包之一,它是ggplot2:图形语法的实现. 我正在使用R中提供的iris ...

  7. 自定义函数 | R语言偏相关分析及绘图

    R语言的偏相关分析过程 偏相关分析介绍 阶偏相关分析: 偏相关系数: Pearson相关系数 Spearman相关系数 Kendall等级相关系数 R语言实现偏相关分析 pcor() pcor.tes ...

  8. [置顶]R语言 ggplot2包

    R语言  ggplot2包的学习 分析数据要做的第一件事情,就是观察它.对于每个变量,哪些值是最常见的?值域是大是小?是否有异常观测? ggplot2图形之基本语法: ggplot2的核心理念是将绘图 ...

  9. 数据可视化——R语言ggplot2包绘制相关矩阵为热图

    数据可视化--R语言ggplot2包绘制相关矩阵为热图 概述:R语言软件和数据可视化--ggplot2快速绘制相关矩阵为热图.本文翻译了一篇英文博客,博客原文链接:http://www.sthda.c ...

最新文章

  1. 数据结构与算法:08 Leetcode同步练习(三)
  2. LinkedList 源码分析(JDK 1.8)
  3. ubuntu下vscode调试开发踩过的坑
  4. luogu P1220 关路灯
  5. 第九:Pytest进阶之xunit fixture
  6. 【写作技巧】毕业论文写作要素和步骤有哪些呢?
  7. 物联卡与SIM卡相比优势在哪
  8. iOS开发之来自一线开发者的Swift学习资源推荐
  9. python基础(16):学生信息管理系统——Python编写(附全部代码)
  10. extmail mysql数据库 重启_配置extmail过程详解 | 学步园
  11. JAVA基础算法(6)----- 国际象棋 α 皇后问题
  12. 为什么选择IT行业,原因是什么
  13. 测试内存的频率稳定性软件,超频心得:3000MHz通过1000%稳定性测试_内存硬盘评测-中关村在线...
  14. Flask-mongoengine分页bug
  15. ffmpeg代码实现往视频文件里面叠加文字
  16. rjs 中的一些记下 免的忘 了
  17. Mysql 数据库实战-建库-建表-查多表
  18. html点击按钮跳出消息框
  19. 关于HMM(隐马尔可夫模型)
  20. 转:彻底搞懂Android文件存储---内部存储,外部存储以及各种存储路径解惑

热门文章

  1. c#: UrlDecode()
  2. 关于jetson 的一堆奇怪bug的修复之路(同时解决sdkmanger升级/安装tensorrt提示密码错误,无法打开terminal)
  3. [emacs]man mode
  4. foo:function(){}与function foo(){}还有foo=function()三者间的区别
  5. 我看《三体》:行走于黑暗森林,常防备降维打击
  6. Java设计模式之——适配器
  7. IntelliJ IDEA pycharm webstorm 激活
  8. 学生用计算机的功能,怎么使用学生专用计算器? 来看看吧
  9. 2016年华为优招面试经验
  10. 开关造成的毛刺_令人困扰的DAC输出短时毛刺脉冲干扰