查看原文
其他

奇怪的图例作业

JunJunLab 老俊俊的生信笔记 2022-08-15


点击上方关注我们



01

AUTUMN



宣传


半年前注册的知识星球账号终于有用武之地了!但是那个是需要付费才能加入的,于是删掉重新建了一个免费的知识星球。

可以在里面讨论交流留言提问题发布作业等等功能,相对于公众号而言,更像是一个线下 讨论班 的感觉。欢迎大家加入!我也会在里面 发布作业给大家挑战自己哦

左边是 微信小程序 ,方便直接查看和进入,也可以 扫描右边的二维码 加入星球。

今天发布了一个小作业,目前大概是没人投稿,欢迎大家充分展示自己的 R 语言技能哦!



02

AUTUMN



纠错


有位粉丝在阅读 环形热图进阶 文章时发现一个漏洞,就是 添加样本注释 的时候没有 s_anno 这个变量,可能是我复制代码时候遗漏了,大家运行的时候加上这句就可以了。

# 添加样本注释
s_anno <- data.frame(samp = c('control','control','treat','treat'),n = c('S1','S2','S3','S4'))
s_anno

     samp  n
1 control S1
2 control S2
3   treat S3
4   treat S4



03

AUTUMN



交作业


目标图:


我先交一下我的作业吧。目标是绘制上面这张图的图例,我第一眼想的是 ggplot 画,但是看图形很可能是 plot 基础绘图函数绘制的,于是探索了一下 legend 这个函数。

1、方法一




同时一起绘制:

# 新建画板
plot.new()

# 绘制图例
legend("center"# 图例位置
       title = "DOM-OTU pair"# 图例标题
       title.adj = 0.5# 图例位置
       legend = c("Hani","Lianghu","Sanjiang","Taihu"), # 图例内容标签
       bty = 'n'# 不展示图例边框
       lwd = 2# 线的粗细
       col = c("#39A2DB","#CCFFBD","#FC92E3","#FA1E0E"), # 线颜色
       pt.cex = 4# 点的大小
       x.intersp = 1# 图例中文字离图片的水平距离
       pch = c(16,16,16,16), # 形状
       merge = F# 圆和线不重叠显示
       border = c("#035397""#5D8233","#D62AD0","#DA0037"), # 正方形边框颜色
       fill = c("#39A2DB","#CCFFBD","#FC92E3","#FA1E0E"), # 正方形填充颜色
       cex = 2# 字体大小

看到圆形并没有达到边框颜色和正方形的边框颜色一致,调了很多次还是没办法哈哈。

2、方法二




先绘制正方形,再添加圆,这个得多次好好调整圆的位置:

# 分别添加

# 新建画板
plot.new()

# 绘制方形图例
legend("center"# 图例位置
       title = "DOM-OTU pair"# 图例标题
       title.adj = 0.5# 图例位置
       legend = c("","","",""), # 图例内容标签
       bty = 'n'# 不展示图例边框
       # pch = c(22,22,22,22), # 形状
       pt.cex = 4# 点的大小
       cex = 2# 字体大小
       border = c("#035397""#5D8233","#D62AD0","#DA0037"), # 正方形边框颜色
       merge = F# 圆和线不重叠显示
       fill = c("#39A2DB","#CCFFBD","#FC92E3","#FA1E0E"), # 正方形填充颜色

)

添加圆形图例:

# 添加圆形
legend(x = 0.438,y = 0.91# 图例位置
       # title = "DOM-OTU pair", # 图例标题
       legend = c("Hani","Lianghu","Sanjiang","Taihu"), # 图例内容标签
       bty = 'n'# 不展示图例边框
       lwd = 2# 线的粗细
       pch = c(19,19,19,19), # 形状
       pt.cex = 4# 点的大小
       cex = 2# 字体大小
       col = c("#39A2DB","#CCFFBD","#FC92E3","#FA1E0E"), # 正方形边框颜色
       merge = F# 圆和线不重叠显示
       x.intersp = 1# 图例中文字离图片的水平距离
)

3、方法三




当然是 ggplot 大法,先构建数据:

# 构建数据
da <- data.frame(type = c(rep('a',4),rep('b',4)),
                 y = rep(1:4,2),
                 name = rep(c('Taihu','Sanjiang','Lianghu','Hani'),2))
da

  type y     name
1    a 1    Taihu
2    a 2 Sanjiang
3    a 3  Lianghu
4    a 4     Hani
5    b 1    Taihu
6    b 2 Sanjiang
7    b 3  Lianghu
8    b 4     Hani

画图:

# 画图
ggplot(da,aes(x = type,y = y,shape = type,
              fill = name,color = name)) +
  # 添加点
  geom_point(size = 13,show.legend = F) +
  # 添加连线
  geom_segment(aes(x = 1.05,xend = 1.95,y = y,yend = y,color = name),
               size = 1,show.legend = F) +
  # 修改点形状
  scale_shape_manual(values = c('a' = 22,'b' = 21)) +
  # 设置边框颜色
  scale_color_manual(values = c("#035397""#5D8233","#D62AD0","#DA0037")) +
  # 设置填充颜色
  scale_fill_manual(values = c("#39A2DB","#CCFFBD","#FC92E3","#FA1E0E")) +
  theme_void() +
  # 标题
  labs(title = "DOM-OTU pair") +
  # 标题居中
  theme(plot.title = element_text(hjust = 0.5,size = 18)) +
  # 添加注释文字标签
  annotate(geom = 'text',label = 'Taihu',x = 2.2,y = 4,size = 7,
           hjust = 0) +
  annotate(geom = 'text',label = 'Sanjiang',x = 2.2,y = 3,size = 7,
           hjust = 0) +
  annotate(geom = 'text',label = 'Lianghu',x = 2.2,y = 2,size = 7,
           hjust = 0) +
  annotate(geom = 'text',label = 'Hani',x = 2.2,y = 1,size = 7,
           hjust = 0)




收官!


代码 我上传到 QQ 群 老俊俊生信交流群 文件夹里。欢迎加入。加我微信我也拉你进 微信群聊 老俊俊生信交流群 哦。

群二维码:


老俊俊微信:



所以今天你学习了吗?

欢迎小伙伴留言评论!

今天的分享就到这里了,敬请期待下一篇!

最后欢迎大家分享转发,您的点赞是对我的鼓励肯定

如果觉得对您帮助很大,赏杯快乐水喝喝吧!

推 荐 阅 读




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存