2. 关于ggplot绘图公式复盘的一些问题1
2022-08-25 本文已影响0人
心惊梦醒
- 对每个aesthetic mapping都有一个scale,所谓scale,就是将data中的variable转换成plot中aesthetics的规则。
- ggplot2有默认的scales,这些默认的scales可以被覆盖。
- 这些scales还负责创建guide、axis或legend,便于图片的阅读,将aesthetic vales转换回data values。
- 不同的aesthetic attribution适合不同类型的variable type,例如
color
和shape
更适合离散型变量,size
更适合连续型变量。但color
也有适合离散型数据和连续型数据的调色板,如RcolorBrewer包
。shape
数量有限,对连续型变量来说,会因为被耗尽而出现无法表示的情况。 - 数据量的大小也会影响aesthetic的使用,当数据点的数量很大时,只用aesthetic mapping很难区分不同的group,此时,facet 是一个可选的解决方案。
-
summary()
可帮助查看一个ggplot对象中各层的数据,例如:
> summary(ggplot(economics, aes(date, unemploy)) + geom_line())
data: date, pce, pop, psavert, uempmed, unemploy [574x6]
mapping: x = ~date, y = ~unemploy
faceting: <ggproto object: Class FacetNull, Facet, gg>
compute_layout: function
draw_back: function
draw_front: function
draw_labels: function
draw_panels: function
finish_data: function
init_scales: function
map_data: function
params: list
setup_data: function
setup_params: function
shrink: TRUE
train_scales: function
vars: function
super: <ggproto object: Class FacetNull, Facet, gg>
-----------------------------------
geom_line: na.rm = FALSE, orientation = NA
stat_identity: na.rm = FALSE
position_identity
-
geom_point(aes(colour = "blue"))
和geom_point(colour = "blue")
的区别是:前者的行为是将color
这个aesthetic scale成一个固定的颜色(注意:不是蓝色,此处设置的"blue"还会根据scale规则映射成可视化特性中的颜色,这种设置方式相当于给了color
一个向量"blue",后台会将这个向量自动循环补齐到data中observations的个数,等价于geom_point(aes(colour = rep("blue",your_length)))
),并增加一个图例(图例中的标签文字=“blue”);后者的行为才是将plot中的所有点都渲染成蓝色。形成这种区别的原因是:前者被包括在aes()
中,表示设置的是data中variables和plot中aesthetic之间的关系(即x,y,color是一个级别的);后者被包含在geom_*()
中,表示设置的是几何对象的属性,例如,这里的几何对象是point
,所以设置color=blue
表示将所有的点都画成蓝色的。所以,你必须分清楚操作的对象是什么?variable的属性还是geom的属性。 -
facet_wrap()
的第一个参数facets
有多种写法:1)一个单边formula;2)一个字符串向量;3)vars()
引用的变量名或表达式。例如:
# 下面的这些写法都是等价的
p <- ggplot(mpg, aes(displ, hwy)) + geom_point()
# 单边公式
p1 <- p + facet_wrap(~cyl+vs)
# 字符串向量
p2 <- p + facet_wrap(c("cyl","vs"))
# vars()引用的变量名,这个函数必须实在数据上下文中使用,单独无法使用?
p3 <- p + facet_wrap(vars(cyl,vs))
# 另外,可以使用表达式,先买个坑......