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


相关文章
|
8月前
ggplot2如何在R语言中绘制表格
ggplot2如何在R语言中绘制表格
|
数据格式
如何绘制热图?ggplot2入门笔记
如何绘制热图?ggplot2入门笔记
|
编解码 数据可视化 数据挖掘
R语言之 ggplot 2 和其他图形
R语言之 ggplot 2 和其他图形
109 0
|
数据可视化 API 图形学
ggplot
ggplot是一个基于Python的数据可视化库,灵感来自于R语言中的ggplot2库。它提供了一种语法简洁、灵活而强大的方式来创建各种类型的统计图表。
204 0
|
数据建模
R绘图-ggplot2 (2)
R绘图-ggplot2 (2)
|
数据挖掘
ggplot2|从0开始绘制折线图
ggplot2|从0开始绘制折线图
177 0
|
数据挖掘
ggplot2|从0开始绘制直方图
ggplot2|从0开始绘制直方图
339 0
|
算法
ggplot2|从0开始绘制PCA图
ggplot2|从0开始绘制PCA图
491 0
|
数据挖掘
ggplot2|从0开始绘制箱线图
ggplot2|从0开始绘制箱线图
187 0