1. 坐标轴
在老版本中,坐标轴的刻度间隔比较近,文本较长的情况下,经常会出现重叠的现象:
代码语言:javascript复制library(ggplot2)
p <- ggplot(mpg)
geom_bar(aes(x = manufacturer),fill = '#8FBC8F')
theme(axis.text.x = element_text(size = 11))
p
image
在新版本中可以将相邻的labels错开:
代码语言:javascript复制p scale_x_discrete(guide = guide_axis(n.dodge = 2))
image
也可以移除重叠的labels:
image
2. bin scale
原来ggplot只有两种scale的类型,即continuous和discrete,在新版本中加了一种新的类型,可以将连续型的数据根据bin变成离散型的。如下所示:
代码语言:javascript复制p <- ggplot(mpg)
geom_point(aes(displ, cty, size = hwy, colour = hwy))p
scale_size_binned()
image
代码语言:javascript复制p scale_colour_binned()
image
将data放到对应的bin中间:
代码语言:javascript复制p scale_x_binned()
image
3. 方向
原来如果想把图形换一个方向的话,可以考虑用coord_flip()来实现,比如:
代码语言:javascript复制ggplot(mpg) geom_bar(aes(x = manufacturer)) coord_flip()
image
新版本的ggplot2对此进行了改进,可以支持两个方向了,不需要用coor_flip()即可实现:
代码语言:javascript复制ggplot(mpg) geom_bar(aes(y = manufacturer))
image
拟合曲线也可改变方向:
代码语言:javascript复制ggplot(mpg, aes(displ, hwy))
geom_point() geom_smooth(orientation = "y")
image
4. aesthetic
比如我们要做一个柱状图,希望纵坐标是density,需要这么写:
代码语言:javascript复制ggplot(mpg, aes(x = displ, y = ..density..)) geom_histogram()
image
但是新版本可以用after_stat()来实现:
代码语言:javascript复制ggplot(mpg, aes(x =displ))
geom_histogram(aes(y = after_stat(density)))
也可以直接调整颜色(加了透明度):
代码语言:javascript复制ggplot(mpg, aes(class, hwy))
geom_boxplot(aes(colour = class, fill = after_scale(alpha(colour, 0.4))))
image
并且现在可以对于一个aesthetic可以支持多个mapping,用stage即可实现,如下面代码,颜色有两个映射:
代码语言:javascript复制ggplot(mpg)
geom_bar(aes(x = drv, colour = stage(start = drv, after_scale = alpha(colour, 0.5))), fill = NA, size = 4 )
image
此外还有一点别的内容,可以参考https://www.tidyverse.org/blog/2020/03/ggplot2-3-3-0/ 中的内容。
欢迎关注公众号!
生信编程日常