R小技巧R学习与可视化

ggplot2回顾(8): 标度

2019-11-02  本文已影响0人  TOP生物信息

其实在看这一章之前,我还不怎么能理解“标度”这个词到底指什么。现在有些想法了,比如将一个离散型变量向颜色这个图形属性做映射,变量有几种值就会选用几种颜色,问题是“用什么颜色?”

这就是标度,它被用来完成图形属性映射之后的一些事情。再比如,将一个连续型变量映射给x轴,x轴上面哪些地方有无刻度,x轴的显示范围都需要“标度”来控制。

这张图很有用,你能很清楚的知道图形属性和变量类型一定时,默认的标度是什么,可选的标度有哪些。当然有一些不太常用。

1. 举个例子——关于图例

1.1 修改标度的参数以改变图例的标题和标签
ggplot(data = msleep, aes(x = sleep_total, y = sleep_cycle, color = vore)) +
  geom_point() +
  scale_color_hue(
    "legend of vore",
    breaks = c("carni", "herbi", "insecti", "omni", NA),
    labels = c("a", "b", "c", "d", "e")
  )

怎么知道是scale_color_hue()这个标度函数的,根据上面的表格。

1.2 改变颜色

如果不设置na.value,最后值为NA的点不会画出来

ggplot(data = msleep, aes(x = sleep_total, y = sleep_cycle, color = vore)) +
  geom_point() +
  scale_color_brewer(palette = "Set1", na.value = "#FC8D62")

breaks, labels, na.value后面会多次提到

2. 标度的通用参数(对x,y,color这些图形属性都适用)

2.1 name

用法:类似scale_x_continuous("xxx")或xlab("xxx"),一种简写。上文中改写图例的名称也用到了。

2.2 limits

用法:类似scale_x_continuous(limits = c(0,15))或xlim(0,15);离散变量是xlim(c("Good","Fair"))
作用:一般用来限定坐标轴的范围,只有处于这个范围内的数据会被拿来画图。

2.3 breaks

作用:设置刻度出现的位置
用法:scale_x_continuous(breaks = c(0,2,4))

2.4 labels

作用:断点处显示的标签
用法:必须和breaks同时存在,scale_x_continuous(breaks = c(0,2,4),labels = c("a","b","c"))

2.5 na.value的妙用

如果想在画图过程中,将超过某一范围的点全都重置为边界值,可以使用它。下图将x=(0,3)之外的点全都画到x=0的位置。

diamonds%>%ggplot(aes(x=carat,y=price))+geom_point()+scale_x_continuous(limits = c(0,3),na.value = 0)
一个重要参数expand

通常图画完之后,画板的范围并不是我们指定的范围,拿上面的图为例,我规定的是x=(0,3),但是两边还是有一些空白区域。一般空白区域是左右各延伸5%的自变量范围。

expand=c(a,b)
扩展画板的范围,假设变量范围是(d=max-min),现在画板的范围是
从min-(a*d+b)到max+(a*d+b)

test_df2 <- data.frame(
  x=c(1,2),
  y=c(100,200)
)
test_df2%>%ggplot(aes(x,y))+geom_point(size=4)+
scale_x_continuous(expand = c(3,1)) 
#现在x轴的范围是-3到6

3. 位置标度

3.1 连续型

scale_x_continuous()
scale_y_continuous()
trans参数的使用

3.2 日期和时间
p <- economics%>%ggplot(aes(date,psavert))+geom_line()+geom_hline(yintercept=0,color="grey")
p
p+scale_x_date(breaks = date_breaks("10 years"))
p+scale_x_date(
  limits = as.Date(c("2004-1-1","2005-1-1")),
  labels = date_format()
)
3.3 离散型

4. 颜色标度

4.1 连续型
双色梯度(low high两个参数)

scale_color_gradient()
scale_fill_gradient()

三色梯度(low mid high三个参数)

scale_color_gradient2()
scale_color_gradient2()

n色梯度

scale_color_gradientn()
scale_fill_gradientn()

一个例子
faithful%>%ggplot(aes(eruptions,waiting))+geom_point()
f2d <- with(faithful,MASS::kde2d(eruptions,waiting,h=c(1,10),n=50))
df <- with(f2d,cbind(expand.grid(x,y),as.vector(z)))
colnames(df) <- c("eruptions","waiting","density")
erupt <- df%>%ggplot(aes(waiting,eruptions))+geom_tile(aes(fill=df$density))+
  scale_x_continuous(expand = c(0,0))+
  scale_y_continuous(expand = c(0,0))

erupt+scale_fill_gradient(limits=c(0,0.04))
erupt+scale_fill_gradient(limits=c(0,0.04),low="black",high="red")
erupt+scale_fill_gradient2(limits=c(-0.04,0.04),midpoint = mean(df$density),low = "green",high = "red",mid = "black")
#midpoint可以理解为中间色,默认情况下0赋给中间色,此处调整后均值赋给中间色
erupt+scale_fill_gradientn(colors=c("red","black","green","yellow"),limits=c(-0.04,0.04))

纯黑色并不是对应0,而是0上面一点点,这个值是均值。

其实可以看出来,瓦片图可以用来画热图。

4.2 离散型
使用RColorBrewer

scale_color_brewer(palette = "Set1")
scale_fill_brewer(palette = "Set1")

手动更改

scale_color_manual(values = c(......))
下文有

5. 手动离散型标度(重要参数values=c(...))

scale_shape_manual()
scale_linetype_manual()
scale_color_manual()

huron <- data.frame(year = 1875:1972, level = LakeHuron)
ggplot(huron, aes(year)) +
  geom_line(aes(y = level - 5,color="a")) +
  geom_line(aes(y = level + 5,color="b"))+
  scale_color_manual("legend",values=c("a"="blue","b"="red","NA"="orange"))

除了手动离散型标度外,这段代码还有另一个知识点:在aes()里面给一个图形属性映射单个值,可以生成图例。

6. 坐标轴与图例

6.1 通用参数

name: 坐标轴和图例的标题
breaks, labels
上文有

6.2 整体外观(由theme控制)

theme(axis.*,
legend.*)

6.3 网格线的设置

theme(panel.grid.minor = element_blank(),
panel.grid.major = element_blank())

6.4 图例的位置(可选:"right","left","top","bottom","none",c(0.5,0.5))

theme(legend.position =)

上一篇下一篇

猜你喜欢

热点阅读