自动确定ggplot facet标签的宽度

时间:2017-09-07 23:59:30

标签: r ggplot2 facet

我有一个实验设计数据我ggplotfacet_grid

factors实验设计是:

factors <- c("mmm.control.30.2","mmm.control.60.2","mmm.control.150.2","mmm.control.300.2","mmm.control.1440.2",
"mmm.cxx.30.2","mmm.cxx.60.2","mmm.cxx.150.2","mmm.cxx.300.2","mmm.cxx.1440.2")

每个factor有3个重复

samples <- unlist(lapply(factors,function(f) paste(f,1:3,sep="_")))

因此data.frame是:

df <- data.frame(sample=samples,val=rnorm(30),stringsAsFactors = F)
df$replicate <- rep(1:3,10)
df$factor <- factor(gsub("_\\d$","",df$sample,perl=T),levels=factors)

这是情节

的助手function
integerBreaks <- function(n = 5, ...)
{
  suppressPackageStartupMessages(library(scales))
  breaker <- pretty_breaks(n, ...)
  function(x){
    breaks <- breaker(x)
    breaks[breaks == floor(breaks)]
  }
}

我试图通过使用此代码的因素facet绘图:

library(ggplot2)
ggplot(df,aes(x=replicate,y=val,color=factor))+
  geom_point(size=3)+facet_grid(~factor,scales="free_x")+
  scale_x_continuous(breaks = integerBreaks())+
theme_minimal()+theme(legend.position="none",axis.title=element_text(size=8))

给出了: enter image description here

正如您所看到的那样,facet标签和每个facet中的左右点都会被切断,因为小平面标签的宽度与小平面的数量之间的比率很大。

我知道我可以使用strip.text.x theme参数来玩,但我想知道是否有自动方法让标签适合方面(或者将刻面进一步分开),并且这些点不会被切断。

我问,因为这是一个通用代码,其中facet及其标签的数量会发生变化。可能有可能根据刻面的数量和标签的宽度来提出一个近似strip.text.x值的函数,但这听起来有点棘手,因此我的好奇心如果已经解决了

0 个答案:

没有答案