R绘图-ggplot2(1)

简介: R绘图-ggplot2(1)

1 数据(Data)和映射(Mapping)

下面以一份钻石的数据为例,这份数据非常大,随机取一个子集来画图。


require(ggplot2)

data(diamonds)

##设置种子,可重复(数字随意)

set.seed(42)

small <- diamonds[sample(nrow(diamonds), 1000), ]


##查看数据情况

head(small)

summary(small)


#画图实际上是把数据中的变量映射到图形属性上。以克拉(carat)数为X轴变量,价格(price)为Y轴变量。

p <- ggplot(data = small, mapping = aes(x = carat, y = price))

##上面这行代码把数据映射XY坐标轴上,需要告诉ggplot2,这些数据要映射成什么样的几何对象,下面以散点为例:


p + geom_point()

#如果想将切工(cut)映射到形状属性。(cut为数据集中的一个分类性状):

p <- ggplot(data=small, mapping=aes(x=carat, y=price, shape=cut))

p+geom_point()


#再比如我想将钻石的颜色(color)映射颜色属性:

p <- ggplot(data=small, mapping=aes(x=carat, y=price, shape=cut, colour=color))

p+geom_point()


3、几何对象(Geometric)

#在上面的例子中,各种属性映射由ggplot函数执行,只需要加一个图层,使用geom_point()告诉ggplot要画散点,于是所有的属性都映射到散点上。

#geom_point()完成的就是几何对象的映射,ggplot2提供了各种几何对象映射,如geom_histogram用于直方图,geom_bar用于画柱状图,geom_boxplot用于画箱式图等等。

#不同的几何对象,要求的属性会有些不同,这些属性也可以在几何对象映射时提供,比如上一图,也可以用以下语法来画:


p <- ggplot(small)

p+geom_point(aes(x=carat, y=price, shape=cut, colour=color))

###重要:ggplot2支持图层,我通常把不同的图层中共用的映射提供给ggplot函数,而某一几何对象才需要的映射参数提供给geom_xxx函数。


直方图

#直方图最容易,提供一个x变量,画出数据的分布。


ggplot(small)+geom_histogram(aes(x=price))


#同样可以根据另外的变量给它填充颜色,比如按不同的切工:

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


#可以将其分开,side-by-side地画直方图。

ggplot(small)+geom_histogram(aes(x=price, fill=cut), position="dodge")


#还可以使用position="fill",按照相对比例来画。

ggplot(small)+geom_histogram(aes(x=price, fill=cut), position="fill")


柱状图

#柱状图非常适合于画分类变量。在这里以透明度(clarity)变量为例。按照不同透明度的钻石的数目画柱状图。


ggplot(small)+geom_bar(aes(x=clarity))

#柱状图两个要素,一个是分类变量,一个是数目,也就是柱子的高度。数目在这里不用提供,因为ggplot2会通过x变量计算各个分类的数目。

#当然你想提供也是可以的,通过stat参数,可以让geom_bar按指定高度画图,比如以下代码:

ggplot()+geom_bar(aes(x=c(LETTERS[1:3]),y=1:3), stat="identity")


#柱状图和直方图是很像的,直方图把连续型的数据按照一个个等长的分区(bin)来切分,然后计数,画柱状图。而柱状图是分类数据,按类别计数。我们可以用前面直方图的参数来画side-by-side的柱状图,填充颜色或者按比例画图,它们是高度一致的。

#柱状图是用来表示计数数据的,但在生物界却被经常拿来表示均值,加上误差来表示数据分布,这可以通常图层来实现,我将在图层一节中给出实例。


密度函数图

#说到直方图,就不得不说密度函数图,数据和映射和直方图是一样的,唯一不同的是几何对象,geom_histogram告诉ggplot要画直方图,而geom_density则说我们要画密度函数图,在我们熟悉前面语法的情况下,很容易画出:

ggplot(small)+geom_density(aes(x=price, colour=cut))

ggplot(small)+geom_density(aes(x=price,fill=clarity))


#####colour参数指定的是曲线的颜色,而fill是往曲线下面填充颜色。


箱式图

#数据量比较大的时候,用直方图和密度函数图是表示数据分布的好方法,而在数据量较少的时候,比如很多的生物实验,很多时候大家都是使用柱状图+errorbar的形式来表示,不过这种方法的信息量非常低,被Nature Methods吐槽,这种情况推荐使用boxplot。

ggplot(small)+geom_boxplot(aes(x=cut, y=price,fill=color))

#geom_boxplot将数据映射到箱式图上,上面的代码,我们应该很熟悉了,按切工(cut)分类,对价格(price)变量画箱式图,再分开按照color变量填充颜色。


ggplot2提供了很多的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


相关文章
|
Windows
ts-node : 无法加载文件 C:\Users\Dell\AppData\Roaming\npm\ts-node.ps1,因为在此系统上禁止运行脚本。有关详细信息
ts-node : 无法加载文件 C:\Users\Dell\AppData\Roaming\npm\ts-node.ps1,因为在此系统上禁止运行脚本。有关详细信息
545 0
|
SQL 分布式计算 DataWorks
解锁数据洞察:通过 DataWorks 获得深度数据分析
DataWorks提供了一种全新的数据洞察功能,通过深度数据分析和可视化,为您的业务决策提供有力支持。了解更多如何利用AI技术解析复杂数据。
499 7
解锁数据洞察:通过 DataWorks 获得深度数据分析
|
11月前
|
XML JSON API
亚马逊商品详情 API 接口开发指南
亚马逊商品详情API为开发者、分析师及电商从业者提供了获取商品数据的便捷途径。通过HTTP/HTTPS协议,支持GET/POST请求,可指定市场代码(如US、UK)和其他参数(如数据格式、附加信息)。返回信息涵盖商品基本信息(标题、品牌等)、价格(售价、货币单位)、库存状态、评论与评分(平均分、总评论数)以及销售排名等,助力市场分析、竞品研究和业务优化。
308 22
|
机器学习/深度学习 存储 算法
基于MobileNet深度学习网络的活体人脸识别检测算法matlab仿真
本内容主要介绍一种基于MobileNet深度学习网络的活体人脸识别检测技术及MQAM调制类型识别方法。完整程序运行效果无水印,需使用Matlab2022a版本。核心代码包含详细中文注释与操作视频。理论概述中提到,传统人脸识别易受非活体攻击影响,而MobileNet通过轻量化的深度可分离卷积结构,在保证准确性的同时提升检测效率。活体人脸与非活体在纹理和光照上存在显著差异,MobileNet可有效提取人脸高级特征,为无线通信领域提供先进的调制类型识别方案。
|
弹性计算 运维 Linux
地图在人物不在的存档修复
地图在人物不在的存档修复
|
前端开发 JavaScript
前端基础(十三)_定时器(间歇定时器、延迟定时器)
本文介绍了JavaScript中定时器的使用,包括`setTimeout`和`setInterval`两种类型。`setTimeout`是实现延迟执行,即等待一定时间后执行一次指定的函数;而`setInterval`是实现间歇执行,即每隔一定时间就执行一次指定的函数。文章还介绍了如何使用`clearTimeout`和`clearInterval`来取消定时器的执行,并通过示例代码展示了定时器的创建和取消。
730 4
前端基础(十三)_定时器(间歇定时器、延迟定时器)
|
SQL 存储 分布式计算
我在淘宝写SQL|ODPS SQL 优化总结
本文结合作者多年的数仓开发经验,结合ODPS平台分享数据仓库中的SQL优化经验。
|
JSON JavaScript 前端开发
JS对象和字符串的相互转换
JS对象和字符串的相互转换
672 4
|
数据挖掘
R语言方差分析(ANOVA):理解与应用
【8月更文挑战第31天】ANOVA是一种强大的统计方法,用于比较三个或更多组之间的均值差异。在R语言中,我们可以轻松地使用`aov()`函数进行ANOVA分析,并通过后置检验(如TukeyHSD检验)来进一步分析哪些组之间存在显著差异。ANOVA在多个领域都有广泛的应用,是数据分析中不可或缺的工具之一。
1601 1
|
存储 测试技术 数据处理
阿里云实时计算企业级状态存储引擎 Gemini 技术解读
阿里云实时计算企业级状态存储引擎 Gemini 技术解读
582 57

热门文章

最新文章