Ich habe Datenrahmen auf this link (Dateiname = Fish11a.rda)Mehrere grid.draw Plots mit einer Funktion zum Zeichnen
load("Fish11a.rda")
df=Fish11a
df=data.frame(Time=as.factor(df[,6]),RoiID=df[,3],Diameter=df[,8])
df$Time.hours=rep(1:10,each=104*max(df$RoiID),len=nrow(df))
df$Time <- factor(df$Time, levels=rev(levels(df$Time)))
df1=split(df,df$Time.hours)
Jetzt habe ich 10 Datenrahmen von df1: df1$"1",df1$"2",.....,df1$"10"
Dann wird ein ein schrieb hle1
Funktion machen Plots aus diesen Daten:
hle1=function(dfr,br,tenplot,tenfile) {
require(ggplot2)
require(gtable)
library(grid)
bre=lapply(split(df,df$Time.hours), function(x) {
br=data.frame(x[c(1,round(nrow(x)*(1:4)/4)),])
br$Min=c(0,15,30,45,60)
return(br)
})
#start plot
g=ggplot(data=dfr, aes(x=factor(RoiID), y=Time, fill = Diameter)) +
theme_minimal() + coord_fixed(ratio=1) +
geom_tile(colour = NA, width = 1.5, height = 1)+
scale_fill_gradient(low="black",high="white")+
theme(axis.title.x=element_blank(),
axis.text.x=element_blank(),
axis.ticks.x=element_blank())+
scale_x_discrete(expand = c(0,0))+
scale_y_discrete(name="Time (min)",
expand = c(0,0),
breaks=br$Time,labels=br$Min)+
theme(axis.ticks.length = unit(0, "lines"))+
ggtitle(tenplot)
# calculate segment coordinates
segs <- c(.39, .23, .23, .15)
segs_center <- cumsum(segs) - segs/2
seg_ticks <- cumsum(segs)[1:3]
seg_labels <- paste("Seg", seq_along(segs))
# create graphicaal objects and gather as tree
grobs <- grobTree(linesGrob(c(0,1), c(-1,-1),gp=gpar(lwd=3)),
segmentsGrob(x0=seg_ticks, x1=seg_ticks, y0=0, y1=-4,gp=gpar(lwd=3)),
textGrob(x=segs_center, y=-3.5,
label = seg_labels, hjust = .5, gp = gpar(cex =.9)))
# insert grobsTree in as annotation
g <- g + annotation_custom(grob = grobs,
ymin = -.3, ymax = 0.2,
xmin = .25, xmax = max(dfr$RoiID))
# override clipping for plotting outside of plotting area
gt <- ggplot_gtable(ggplot_build(g))
gt$layout$clip[gt$layout$name == "panel"] <- "off"
grid.newpage()
grid.draw(gt)}
werde ich die Funktion hle1
verwenden, um Plot für die zehn Datenrahmen oben (df1 $ "1", ..., df1 $ "10")
Und dann zu machen, ich will 10 Parzellen setzen gemacht in einer Figur durch grid.arrange und speichern als tiff.file
tiff(file="test11.tiff", width = 17,height=30, units = 'cm', res = 300)
require(gridExtra)
grid.arrange(hle1(df1$"1",bre$`1`,c("1 hour-feed")),
hle1(df1$"2",bre$`2`,c("2 hours-feed")),
hle1(df1$"3",bre$`3`,c("3 hours-feed")),
hle1(df1$"4",bre$`4`,c("4 hours-feed")),
hle1(df1$"5",bre$`5`,c("5 hours-feed")),
hle1(df1$"6",bre$`6`,c("6 hours-feed")),
hle1(df1$"7",bre$`7`,c("7 hours-feed")),
hle1(df1$"8",bre$`8`,c("8 hours-feed")),
hle1(df1$"9",bre$`9`,c("9 hours-feed")),
hle1(df1$"10",bre$`10`,c("10 hours-feed")),
ncol=5,top="Fish 11 - feed")
dev.off()
Aber ich habe nur eine Plots von DF1 $ "10". Weiß jemand von euch warum? Ich schätze Ihren Wert Zeit auf meine lange Frage.
Hallo Jeroen B., danke für deine Antwort. Es funktioniert auch für mich, aber ich habe das y-Label verloren, das aus df "br" besteht, weil das Argument "br" aus der Funktion entfernt wurde. Wissen Sie, wie Sie dieses Problem beheben können? Und wie gibt man die Ergebnisse von hle1 zurück? Danke vielmals. –
Leider bin ich nicht vertraut genug mit Ihrem Code, um schnell herauszufinden, wie dies zu tun ist. Goog Glück aber! –
Vielen Dank für Ihre aktualisierte Antwort. Ich habe mein Problem anhand deines Vorschlags herausgefunden :). –