2013-11-23 103 views
1

我正在ggplot2中繪製一系列圖,每列數據一列,我希望能夠對其進行編碼,以便Y軸標籤動態變化爲繪製變量的名稱(以及其他一些常數信息在標籤中)。如何在ggplot2中使用ylab()創建動態軸標籤?

我從dput()數據:

df <- structure(list(day = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L), .Label = c("5-Aug", "10-Aug", "17-Aug"), class = "factor"), 
station = c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 
1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L 
), Bug = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 
1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 
3L, 3L, 3L), .Label = c("Copepod", "Copepod nauplii", "Harpactioid copepods" 
), class = "factor"), Mean = c(382.4048896, 1017.171389, 
1519.141298, 233.3753491, 167.1086422, 530.7227507, 20.55943305, 
482.9992303, 10.49548997, 698.0193699, 5398.533995, 2458.635058, 
36.90431458, 124.4956045, 20.8459728, 8.414735929, 4014.649407, 
7.279486288, 346.1246378, 5722.82018, 6253.357325, 427.6856315, 
1768.984975, 1486.635443, 4.825526305, 46.50462845, 1.07692853 
), StErr = c(83.18963396, 100.9187504, 73.45417607, 88.08491141, 
44.57580452, 44.03459391, 4.663586058, 112.4238952, 2.551982788, 
284.3933876, 3417.741042, 689.5558519, 9.798626545, 49.16103906, 
4.268815029, 3.76465482, 1803.977156, 1.328408258, 53.67873047, 
1796.827256, 732.573507, 86.56594682, 198.7842421, 229.0132055, 
1.129940095, 16.48065742, 0.283417726)), .Names = c("day", 
"station", "Bug", "Mean", "StErr"), row.names = c(NA, -27L), class = "data.frame") 

我使用下面的代碼來自動創建並保存一個新的,動態命名的.PDF:

library(ggplot2) 
df$day<-factor(df$day, levels = c("5-Aug","10-Aug","17-Aug")) #corrects day order 

allplots <- ggplot(data=df, aes(x=station, y=Mean)) + 
    geom_errorbar(aes(ymin=(Mean-StErr), ymax=(Mean+StErr)), colour="black", width=0.1)+ 
    geom_point(size=2) + 
    xlab(NULL) + 
    ylab(expression(paste('Copepods,'~'#/m'^3))) + 
    theme_bw() + 
    theme(
    panel.grid.major = element_blank(), 
    panel.grid.minor = element_blank() 
    ) + 
    scale_x_continuous(expand=c(.3,0), breaks=c(1:3), labels=c("In", "FL", "Off")) + 
    annotation_logticks(sides = "l") + 
    scale_y_log10() + 
    theme(axis.text.x=element_text(size=12)) + 
    theme(axis.text.y=element_text(size=12)) + 
    facet_grid(Bug ~ day) 

plotfun <- function(x,y) { 
    a <- ggplot(data=x, aes(x=station, y=Mean)) + 
     geom_errorbar(aes(ymin=(Mean-StErr), ymax=(Mean+StErr)), colour="black", width=0.1)+ 
     geom_point(size=2) + 
     xlab(NULL) + 
     ylab(expression(paste('Copepods,'~'#/m'^3))) + #I'd like Copepods to change with variable that is being plotted 
     theme_bw() + 
     theme(
     panel.grid.major = element_blank(), 
     panel.grid.minor = element_blank() 
     ) + 
     scale_x_continuous(expand=c(.3,0), breaks=c(1:3), labels=c("In", "FL", "Off")) + 
     annotation_logticks(sides = "l") + 
     scale_y_log10() +   
     theme(axis.text.x=element_text(size=12)) + 
     theme(axis.text.y=element_text(size=12)) +    
     facet_grid(.~day) 
pdf(file=paste(y,'pdf',sep=".")) 
print(a) 
dev.off() 
    } 

mapply(plotfun, split(df, df$Bug), levels(df$Bug)) 

我試過ylab內使用paste(levels(df$Bug))( ),但無法讓它工作。我不確定還有什麼可以嘗試的,希望有人能夠提出一些我可以研究的建議。我希望每個Y軸都讀取「VariableName,每立方米」,其中VariableName取自Bug的級別(即橈足類,橈足類和橈足類橈足類)。有誰知道如何做到這一點?如果我能把它運用起來,這看起來非常酷和有用!感謝您的任何建議。

回答

2

我想我可以幫助標記ylab的情節,這似乎是你的問題的核心。這產生了三張圖,但是我遇到了各種各樣的ggplot錯誤(不太明白),這就需要我提取一些與主題和縮放​​相關的代碼。後來我用不同的順序重新將它放回來,這似乎使ggplot機器感到高興。

plotfun <- function(x,y) { 
    a <- ggplot(data=x, aes(x=station, y=Mean)) + 
     geom_errorbar(aes(ymin=(Mean-StErr), ymax=(Mean+StErr)), 
         colour="black", width=0.1)+ 
     geom_point(size=2) + 
     xlab(NULL) + 
     ylab( bquote(.(y)~"#"/m^3))+ 
     scale_y_log10()+ 
     theme_bw() 
pdf(file=paste(y,'pdf',sep=".")) 
print(a) 
dev.off() 
    } 

mapply(plotfun, x=split(df, df$Bug), y=levels(df$Bug)) 

通過移動項目(由錯誤信息驅動的方式,我先後獲得),並加入一個+號,我能得到這個版本來運行:

plotfun <- function(x,y) { 
    a <- ggplot(data=x, aes(x=station, y=Mean)) + 
     geom_errorbar(aes(ymin=(Mean-StErr), ymax=(Mean+StErr)), colour="black", width=0.1)+ 
     geom_point(size=2) + 
     xlab(NULL) + 
     ylab(bquote(.(y)*","*~"#"/m^3))+ 
     scale_y_log10() + annotation_logticks(sides = "l") + 
     theme_bw() + 
     theme( panel.grid.major = element_blank(), 
     panel.grid.minor = element_blank() ) + facet_grid(.~day) 
pdf(file=paste(y,'pdf',sep=".")) 
print(a) 
dev.off() 
    } 

mapply(plotfun, x=split(df, df$Bug), y=levels(df$Bug)) 

我就發佈一個頁面: enter image description here

而且固定,我與allplots版本歌廳的錯誤:

allplots <- ggplot(data=df, aes(x=station, y=Mean)) + 
    geom_errorbar(aes(ymin=(Mean-StErr), ymax=(Mean+StErr)), colour="black", width=0.1)+ 
    geom_point(size=2) + 
    facet_grid(Bug ~ day) + 
    xlab(NULL) + 
    ylab(expression(Copepods *","* ~'#'/m^3)) +scale_x_continuous(expand=c(.3,0), breaks=c(1:3), labels=c("In", "FL", "Off")) +annotation_logticks(sides = "l") + scale_y_log10() + 
    theme_bw() + 
    theme( panel.grid.major = element_blank(), 
    panel.grid.minor = element_blank() ) + 
    theme(axis.text.x=element_text(size=12)) + 
    theme(axis.text.y=element_text(size=12)) 
print(allplots) 
+0

謝謝,那就是我正在尋找的!你介意給我解釋一下,如何在變量名後加「3/m^3」之前的逗號?我已經在逗號周圍嘗試過和沒有「」。 – wonderoustree

+1

使用此表單:'*「,」*'...在輸出中插入(未)引用的逗號字符。表達式標記需要用代數或星號或數學符號來區分它們。 –

+0

修改了答案。 –

相關問題