查看: 110|回复: 1

[R语言] ggplot2-annotation|画图点“精”,让图自己“解释”

[复制链接]
  • TA的每日心情

    2016.7.20 14:55
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    版主

    Rank: 10Rank: 10Rank: 10

    主题
    29
    奥币
    875
    积分
    390
    注册时间
    2016.3.21
    在线时间
    88 小时

    活跃会员突出贡献


    发表于 4 天前 | 显示全部楼层 |阅读模式
                                                                                                       
    可视化的展示方式可以使数据更易读,且容易看出一些数据下隐藏的“结果”,而添加注释则可以进一步聚焦到想重点展示的“信息”。
    一 绘制基础图
    [AppleScript] 纯文本查看 复制代码
    library(ggplot2)
    p <- ggplot(mtcars, aes(x = wt, y = mpg)) + 
      geom_point()


    更多参数ggplot2|详解八大基本绘图要素,主题ggplot2|theme主题设置,详解绘图优化-“精雕细琢”,图例ggplot2 |legend参数设置,图形精雕细琢 可参考。

    二 添加“注释”2.1 添加文字标签1) 通过x y 指定标签的位置
    [AppleScript] 纯文本查看 复制代码
    p + annotate("text", x = 4, y = 25, label = "add text",
                 color="orange",size = 5, angle=45, fontface="bold" )



    2) 生成注释数据集,然后添加
    [AppleScript] 纯文本查看 复制代码
    annotation <- data.frame(
      x = c(2,4),
      y = c(20,25),
      label = c("label 1", "label 2")
    )

    A:geom_text方式添加
    [AppleScript] 纯文本查看 复制代码
    p + geom_text(data=annotation, aes( x=x, y=y, label=label))


    B:geom_label方式添加
    [AppleScript] 纯文本查看 复制代码
    p + geom_label(data=annotation, aes( x=x, y=y, label=label),                
                   color="blue", size=5 , angle= 60, fontface="bold" )


    如果待注释的text太多,可使用ggrepel包解决标签太多导致的重叠问题
    ggplot2-plotly|让你的火山图“活”过来

    2.2 点注释
    1)添加点
    [AppleScript] 纯文本查看 复制代码
    p + annotate(geom = "point", x = 4, y = 25, colour = "orange", size = 5)



    2)更改原有点对齐数据集中数据坐标即可
    [AppleScript] 纯文本查看 复制代码
    p + annotate(geom = "point", x = 2.620, y = 21.0, colour = "red", size = 5)


    3)想在原有点外加一个圈,怎么办呢?
    [AppleScript] 纯文本查看 复制代码
    p + 
      annotate(geom = "point", x = 2.620, y = 21.0, colour = "red", size = 3) + 
      annotate(geom = "point", x = 2.620, y = 21.0)


    额,,我想到的是图层叠加,有其他办法的欢迎告知。
    4)pointrange添加点及range
    [AppleScript] 纯文本查看 复制代码
    p + annotate("pointrange", x = 3.5, y = 20, ymin = 12, ymax = 28,
                 colour = "orange", size = 1.5, alpha=0.6)



    2.3 线 , 矩形注释1) 添加矩形,给出边的范围
    [AppleScript] 纯文本查看 复制代码
    p + annotate("rect", xmin=2, xmax=3, ymin=20 , ymax=30,
                 alpha=0.2, color="blue", fill="blue")


    2)添加线段,给出两端点位置
    [AppleScript] 纯文本查看 复制代码
    p + annotate("segment", x = 1, xend = 3, y = 25, yend = 15,
                 colour = "purple", size=3, alpha=0.6)


    3)线段加箭头,给出两端点位置
    [AppleScript] 纯文本查看 复制代码
    p + annotate("segment", x = 2, xend = 4, y = 15, yend = 25,
                 colour = "pink", size=3, alpha=0.6,
                 arrow=arrow())


    曲线加箭头?
    [AppleScript] 纯文本查看 复制代码
    p + annotate("curve", x = 4, xend = 2.620, y = 30, yend = 21.0,
                 colour = "blue", curvature = .3, arrow = arrow(length = unit(2, "mm"))
    ) + annotate(geom = "text", x = 4.1, y = 30.1, label = "关注这个点?", hjust = "left")





    2.4 添加垂直线
    [AppleScript] 纯文本查看 复制代码
    p + geom_hline(yintercept=25, color="orange", size=1) + geom_vline(xintercept=3, color="orange", size=1)


    2.5 添加轮廓图
    [AppleScript] 纯文本查看 复制代码
    library(ggforce)
    library(concaveman)
    ggplot(mpg, aes(displ, hwy,col = cyl)) +
      geom_point() + geom_mark_hull(aes(label = cyl, group = cyl),
                       show.legend = FALSE, expand = unit(3, "mm")) +
      theme_no_axes()


    ggforce|绘制区域轮廓-区域放大-寻找你的“onepiece”



    ◆ ◆ ◆  ◆ ◆
    精心整理(含图版)|R语言生信分析,可视化,你要的全拿走,建议收藏!

                   


    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    回复

    使用道具 举报

  • TA的每日心情
    yes!
    昨天 08:46
  • 签到天数: 412 天

    连续签到: 1 天

    [LV.9]以坛为家II

    帝王蝶

    Rank: 4

    主题
    1
    奥币
    1704
    积分
    420
    注册时间
    2016.9.4
    在线时间
    106 小时

    发表于 4 天前 | 显示全部楼层
    学习了!
    图片并写下今天
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表