前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >跟着Nature Communications学画图:R语言ggplot2画带有底纹的柱形图

跟着Nature Communications学画图:R语言ggplot2画带有底纹的柱形图

作者头像
用户7010445
发布2021-11-23 15:32:06
1.2K0
发布2021-11-23 15:32:06
举报

论文是

Bioactivity descriptors for uncharacterized chemical compounds

本地存储文件名 s41467-021-24150-4.pdf

公众号后台有读者留言问到了这个论文里的一些图的实现办法,但是我没有找到作图用到的原始数据。复现起来还是比较麻烦的。浏览全文的时候发现了其中一个带有底纹的柱形图。这个还是比较有用的。因为有的期刊可能会要求配色只能用黑白灰。区分不同的分组加上底纹可能会比较好看。之前出推文介绍过patternplot这个R包画带有底纹的柱形图,但是他的代码和ggplot2的格式区别还挺大的。最近又发现了一个R包ggpattern,画带有底纹的柱形图或者给柱形图添加图片都非常方便。今天的推文简单介绍一下这个图

ggpattern帮助文档

  • https://coolbutuseless.github.io/package/ggpattern/

首先是安装ggpattern

代码语言:javascript
复制
remotes::install_github("coolbutuseless/ggpattern")

查看帮助文档

代码语言:javascript
复制
help(package="ggpattern")

做柱形图填充用到的函数是geom_col_pattern(),填充的内容有4个,分别是 'stripe' (default), 'crosshatch', 'point', 'circle'

做一个简单的柱形图看下效果

代码语言:javascript
复制
df<-data.frame(x=LETTERS[1:4],
               y=5)

library(ggplot2)
library(ggpattern)

ggplot()+
  geom_col_pattern(data=df,
                   aes(x=x,y=y,pattern=x),
                   #pattern="none",
                   pattern_fill="gray",
                   pattern_color="black",
                   fill="white")+
  scale_pattern_manual(values = c("stripe","crosshatch",
                                  "circle","none"))

这里

  • pattern_size 对应的是内部填充的边框
  • pattern_density 对应的是内部填充的粗细
  • pattern_spacing 对应的设置内部填充的多少

帮助文档里写道填充也可以用point,但是我用的时候遇到了报错,暂时不知道什么原因

比如

代码语言:javascript
复制
ggplot()+
  geom_col_pattern(data=df,
                   aes(x=x,y=y),
                   pattern="point",
                   pattern_fill="gray",
                   pattern_color="black",
                   fill="white")

报错是

代码语言:javascript
复制
Error: Don't know the function for pattern point
Run `rlang::last_error()` to see where the error occurred.

按照提示运行rlang::last_error(),返回内容

代码语言:javascript
复制
<error/rlang_error>
Don't know the function for pattern point
Backtrace:
  1. (function (x, ...) ...
 22. grid:::drawGTree(x)
 24. gridpattern:::makeContent.pattern(x)
 25. gridpattern:::get_pattern_fn(x$pattern)
 26. `%||%`(...)
Run `rlang::last_trace()` to see the full context.

目前还看不懂报错原因

接下来模仿一下论文中的Figure1b

首先是随便构造一份数据,部分如下

读取数据集,然后把x列和y列粘贴到一起

代码语言:javascript
复制
library(readxl)
library(tidyverse)

df<-read_excel("NC_figure1B.xlsx")
df %>% 
  mutate(new_col=paste(y,x,sep="")) -> df1

作图代码

代码语言:javascript
复制
library(ggplot2)
library(ggpattern)
df1$new_col<-factor(df1$new_col,
                    levels = rev(df1$new_col))

ggplot()+
  geom_col_pattern(data=df1,aes(y=new_col,x=Molecules),
                   pattern="stripe",
                   pattern_fill="grey",
                   #pattern_color="blue",
                   pattern_density=0.2,
                   pattern_size=0,
                   fill="white",
                   color="black",
                   pattern_spacing=0.02,
                   width=0.5)+
  scale_x_continuous(expand = c(0,0),
                     limits = c(0,6.1),
                     breaks = c(3,4,5,6),
                     labels = c(expression(10^3),
                                expression(10^4),
                                expression(10^5),
                                expression(10^6)))+
  theme_bw()+
  labs(y=NULL)+
  ggsave(filename = "1b.pdf",
         width=3,
         height = 8,
         family="serif")
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小明的数据分析笔记本 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 论文是
  • 首先是安装ggpattern
  • 查看帮助文档
  • 做一个简单的柱形图看下效果
  • 接下来模仿一下论文中的Figure1b
    • 首先是随便构造一份数据,部分如下
    • 读取数据集,然后把x列和y列粘贴到一起
    • 作图代码
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档