ggplot2回顾(8): 标度

作者: TOP生物信息 | 来源:发表于2019-11-02 12:10 被阅读0次

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

    这就是标度,它被用来完成图形属性映射之后的一些事情。再比如,将一个连续型变量映射给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 =)

    相关文章

      网友评论

        本文标题:ggplot2回顾(8): 标度

        本文链接:https://www.haomeiwen.com/subject/axucbctx.html