论文是
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()
,返回内容
<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")