2015-11-05 176 views
3

Fig 1下標和在x軸刻度標籤在GGPLOT2寬度限制

這是目前我的用於數字代碼以上

ggplot(AllData, aes(Year, AGResiduals, fill=Type)) + 
    geom_boxplot(outlier.size=0) + 
    scale_fill_manual(values=c("skyblue4", "skyblue"), 
        name="Male Type", 
        labels=c("Guarders","Sneakers")) + 
    labs(x=NULL, y = "Residual of Accessory Gland Mass x Total Mass") + 
    scale_x_discrete(limits=c("2007","2008","2010","2011","2013","2014","2015"), 
        labels=str_wrap(c("2007 (nG=37, nS=8)","2008 (nG=4, nS=6)","2010 (nG=31, nS=6)","2011 (nG=55, nS=5)","2013 (nG=202, nS=24)","2014 (nG=63)","2015 (nG=59, nS=3)"), 
        width=6)) + 
    theme(plot.title = element_text(size = rel(1.4)), 
     axis.title = element_text(size = rel(1.2)), 
     axis.text.x = element_text(size = rel(1.5)), 
     axis.text.y = element_text(size = rel(1.5)), 
     panel.grid.major = element_blank(), 
     panel.grid.minor = element_blank(), 
     panel.background = element_blank(), 
     axis.line = element_line(colour = "black")) 

我想使「G」和「S」的在每個x軸刻度標籤下標(他們指定兩個不同組的樣本大小,G和S)。

寫作

expression(2007 (n[G]=37, n[S]=8) 

作品,但只有當我去掉前面的

str_wrap 

代碼的某些原因。

我需要限制每個x軸刻度標籤的文本寬度,所以我需要保留str_wrap或在表達式函數中以某種方式使用換行符。

我也無法用一個因子取代我的標籤列表,因爲我必須對我想展示的年份設置限制。

有人可以請幫助如何製作允許下標的3行x軸刻度標籤嗎?

回答

1

我無法找到一個方法來顯示多條線路上的表達,但你可以嘗試旋轉標籤:

library(stringr) 
library(ggplot2) 
library(scales) 
library(dplyr) 

n <- 100 
y <- as.character(sample(2007:2015,n,replace=T)) 
t <- sample(c("Guarders","Guarders","Sneakers"),n,replace=T) 
r <- rnorm(n,10,20) 
nsk <- sum(t=="Sneakers") 
r[ t=="Sneakers" ] <- rnorm(nsk,1,5) 
AllData <- data.frame(Year=y,AGResiduals=r,Type=t) 

sdf <- AllData %>% group_by(Year) %>% 
        summarize(n=n(), ng=sum(Type=="Guarders")) 

fmts <- rep("%s (n[G]==%d) ~~ (n[S]==%d)",nrow(sdf)) 
labs2 <- do.call(sprintf,list(fmts,sdf$Year,sdf$ng, sdf$n-sdf$ng)) 

ex2 <- parse(text=labs2) 

ggplot(AllData, aes(Year, AGResiduals, fill=Type)) + 
    geom_boxplot(outlier.size=0) + 
    scale_fill_manual(values=c("skyblue4", "skyblue"), 
        name="Male Type", 
        labels=c("Guarders","Sneakers")) + 
    labs(x=NULL, y = "Residual of Accessory Gland Mass x Total Mass") + 
    scale_x_discrete(limits=c("2007","2008","2010","2011","2013","2014","2015"), 
        labels=ex2) + 
    theme(plot.title = element_text(size = rel(1.4)), 
     axis.title = element_text(size = rel(1.2)), 
     axis.text.x = element_text(size = rel(1.0),angle=-30,hjust=0), 
     axis.text.y = element_text(size = rel(1.5)), 
     panel.grid.major = element_blank(), 
     panel.grid.minor = element_blank(), 
     panel.background = element_blank(), 
     axis.line = element_line(colour = "black")) 

此息率: enter image description here

+0

使用本'FMTS < - 代表(「頂上(%S,(正[G] ==%d)〜(N [S ] ==%d))「,nrow(sdf))''你可以得到兩行,但我不能得到第三個。用逗號替換波浪線,第三行消失。我也必須調用ggplot兩次才能得到這個結果,否則我會得到一個錯誤,但它會在第二次運行。如此挑剔。 @baptiste大概知道 – rawr

+0

不錯,會在那裏添加。 –

+0

將它作爲第二個解決方案添加,就像它一樣。 –

1

RAWR提出了一個建議,讓您得到兩條,但不是三條線。由於它不需要旋轉,因此我將它作爲第二個解決方案加入。

此:

library(stringr) 
library(ggplot2) 
library(scales) 
library(dplyr) 
set.seed(23456) 
n <- 100 
y <- as.character(sample(2007:2015,n,replace=T)) 
t <- sample(c("Guarders","Guarders","Sneakers"),n,replace=T) 
r <- rnorm(n,10,20) 
nsk <- sum(t=="Sneakers") 
r[ t=="Sneakers" ] <- rnorm(nsk,1,5) 
AllData <- data.frame(Year=y,AGResiduals=r,Type=t) 

sdf <- AllData %>% group_by(Year) %>% 
    summarize(n=n(), ng=sum(Type=="Guarders")) 

fmts <- rep("atop(%s, n[G]==%d ~~ n[S]==%d)",nrow(sdf)) # two rows 
labs2 <- do.call(sprintf,list(fmts,sdf$Year,sdf$ng, sdf$n-sdf$ng)) 

ex2 <- parse(text=labs2) 

ggplot(AllData, aes(Year, AGResiduals, fill=Type)) + 
    geom_boxplot(outlier.size=0) + 
    scale_fill_manual(values=c("skyblue4", "skyblue"), 
        name="Male Type", 
        labels=c("Guarders","Sneakers")) + 
    labs(x=NULL, y = "Residual of Accessory Gland Mass x Total Mass") + 
    scale_x_discrete(limits=c("2007","2008","2010","2011","2013","2014","2015"), 
        labels=ex2) + 
    theme(plot.title = element_text(size = rel(1.4)), 
     axis.title = element_text(size = rel(1.2)), 
     axis.text.x = element_text(size = rel(1.0),angle=0,hjust=0), 
     axis.text.y = element_text(size = rel(1.5)), 
     panel.grid.major = element_blank(), 
     panel.grid.minor = element_blank(), 
     panel.background = element_blank(), 
     axis.line = element_line(colour = "black")) 

產生這樣的: enter image description here