我有一个自定义函数,用于所有绘图而不是普通函数ggplot
:
my_ggplot <- function(...){
ggplot(...) +
theme_bw() +
scale_colour_manual(values=get_palette(20)) +
theme(axis.text.x=element_text(size=15),
axis.text.y=element_text(size=15),
axis.title.y=element_text(vjust=-.5, size=15, face="bold"),
axis.title.x=element_text(vjust=-.5, size=15, face="bold"),
plot.title=element_text(vjust=1, size=18, face="bold"),
legend.title=element_text(size=15, face="bold"),
plot.margin=unit(c(2,1,2,2), "lines")) # T R B L
}
现在我可以做类似的事情:
my_ggplot(molten_df, aes(timepoint,count,group=gene_symbol)) +
geom_line(aes(color=gene_symbol), lwd=1.5)
这给了我不错的标签字体大小和我自己的色标。不幸的是,我必须手动将调色板大小 (20) 编码到我的 get_palette 函数,该函数根据我传递的数字返回不同的调色板。
我的问题:有没有办法推断颜色美学将具有的级别数,因此当我需要绘制 21 种颜色时 my_ggplot 不会崩溃?我想这就是 ggplot 的做法,但我似乎无法在他们的源代码中找到相关函数。
@user946850 回答 这是我最终做的:
my_ggplot <- function(...){
ggplot(...) +
theme_bw() +
discrete_scale("colour", "my_scale", dyn_palette()) +
theme(axis.text.x=element_text(size=15),
axis.text.y=element_text(size=15),
axis.title.y=element_text(vjust=-.5, size=15, face="bold"),
axis.title.x=element_text(vjust=-.5, size=15, face="bold"),
plot.title=element_text(vjust=1, size=18, face="bold"),
legend.title=element_text(size=15, face="bold"),
plot.margin=unit(c(2,1,2,2), "lines")) # T R B L
}
dyn_palette <- function(){
function(n){
get_palette(n)
}
}