关于diamonds数据集
ggplot2内置数据集,包含53940颗钻石的信息。
carat:克拉
cut:切割质量
color:颜色等级
clarity:纯净度等级
depth:深度比例
table:钻石顶部相对于最宽点的宽度
price:价格
"x" "y" "z" :长宽深
↑以上来自帮助文档?diamonds
统计变换函数和几何对象函数
统计变换:绘图时用来计算新数据的算法叫做统计变换stat
geom_bar做出的图纵坐标为count,是计算的新数据。
geom_bar的默认统计变换是stat_count,stat_count会计算出两个新变量-count(计数)和prop(proportions,比例)。
每个几何对象函数都有一个默认的统计变换,每个统计变换函数都又一个默认的几何对象。
如:用几何对象函数geom_bar作直方图,默认统计变换是stat_count,
用统计变换函数stat_count做计数统计图,默认几何对象是直方图。
这两者是等价的
为什么要使用某种统计变换?
1.覆盖默认的统计变换
直方图默认的统计变换是stat_count,也就是统计计数。当需要直接用原表格的数据作图时就会需要覆盖默认的。
demo <- tribble( ~cut, ~freq, "Fair", 1610, "Good", 4906, "Very Good", 12082, "Premium", 13791, "Ideal", 21551 )
#新建表格并赋值给demo
ggplot(data = demo) + geom_bar(mapping = aes(x = cut, y = freq), stat = "identity")
这里直接用频数表作图不需要再统计变换了,于是用stat = "identity"覆盖默认的统计变换
2.Y轴可以用比例来表示
直方图默认的y轴是x轴的计数。此例子中x轴是是五种cut(切割质量),直方图自动统计了这五种质量的钻石的统计计数,当你不想使用计数,而是想显示各质量等级所占比例的时候就需要用到prop。
ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, y = ..prop.., group = 1))
注意:1. y = ..prop..;
2.group=1的意思是把所有钻石作为一个整体,显示五种质量的钻石所占比例体现出来。如果不加这一句,就是每种质量的钻石各为一组来计算,那么比例就都是100%,显示五根大黑柱子。
3.在代码中强调统计变换。
以stat_summary为例。
ggplot(data = diamonds) + stat_summary( mapping = aes(x = cut, y = depth), fun.ymin = min, fun.ymax = max, fun.y = median )
(小洁碎碎念:stat_summary的默认几何图形是geom_pointrange,而这个geom_pointrange默认的统计变换却是identity,如果你不知道其中猫腻,就会发现他俩代码竟然不可逆。。。一夫多妻的节奏呀。)
因此要用几何对象函数重复这个图形,则需要指定stat_summary。
ggplot(data = diamonds) + geom_pointrange( mapping = aes(x = cut, y = depth), stat = "summary", fun.ymin = min, fun.ymax = max, fun.y = median )
位置调整-position
在直方图中,颜色映射是由color和fill之分的,表示边框和填充。如果要设置无填充(也就是透明),则fill=NA。NA在数据框里表示空值。
1.直方图之堆叠式-fill
堆叠式就是在基础条形图上添加第三个变量,将这个变量映射给fill,就会在每个条形中分出不同颜色且不同比例的矩形。
ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut,fill=clarity))
除了映射的方式以外,position参数设置位置调整功能。position="fill"也可以设置,但这样设置的每组堆叠条形具有相同的高度。
ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, fill = clarity), position = "fill")
笔者补充:感觉这种堆叠方式并不如设置fill映射,因为他突出的是比例,每组之间数值的差异被忽略了。
2.直方图之对象直接显示-identity
这个直方图是重叠的
3.直方图之并列式-dodge
ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, fill = clarity), position = "dodge")
3.散点图之扰动-jitter
ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy))
添加扰动
position参数设为jitter的快速实现:geom_jitter()
ggplot(data = mpg) + geom_jitter(mapping = aes(x = displ, y = hwy))
4.stack-堆叠
三、坐标系
(1)coord_flip#翻转坐标系
ggplot(data = mpg, mapping = aes(x = class, y = hwy)) + geom_boxplot() + coord_flip()
(2)coord_quickmap#为地图设置长宽比此处需要加载maps包,否则会报错。
nz <- map_data("nz")
ggplot(nz, aes(long, lat, group = group)) + geom_polygon(fill = "white", colour = "black")
#geom_polygon 是多边形图
ggplot(nz, aes(long, lat, group = group)) + geom_polygon(fill = "white", colour = "black") + coord_quickmap()
(3)coord_polar #极坐标系
bar <- ggplot(data = diamonds) + geom_bar( mapping = aes(x = cut, fill = cut), show.legend = FALSE, width = 1 ) + theme(aspect.ratio = 1) + labs(x = NULL, y = NULL)
bar + coord_flip()
bar + coord_polar()