2016-07-10 15 views
0

私はこれらの質問1,23を見てきましたが、私の場合とは異なる問題に対処しているようです。通常、私はこのコードggplot2の複数のプロットのループを使用

library(ggplot2) 
library(maptools) 
library (rgdal) 
library (rgeos) 
library(export) 
library(ReporteRs) 
library(ReporteRsjars) 
library(rtable) 
library(xtable) 
library(taRifx) 
library(devtools) 
library(tidyr) 
library(dplyr) 
#Tidying up data from wide to long format 
    plots <- read.delim("withoutPG3,23,24.txt") 
    head(plots,5) 
    ################ SUBSETTING DATA INTO 10 MANAGABLE PLOTS ########################### 
    ###### PLOT 1 
    plot1<- plots %>% 
     select(1:5,Ammonia, Asterorotalia, Bolivina, Bulimina, Cancris, Challengerella, Cibicides, Elphidium, Hanzawaia, Nonion)%>% 
     gather(genus,`Relative Abundance (%)`, Ammonia, Asterorotalia, Bolivina, Bulimina, Cancris, Challengerella, Cibicides, Elphidium, Hanzawaia, Nonion) 
    ############################################################################################################ 
    ## Loading the Persian Gulf shape fill referred to as iho 
    PG <- readShapePoly("iho.shp") 
    PG <- readOGR(dsn = ".", "iho") 
    # convert to dataframe 
    AG <- fortify(PG) 
    ##################################################################################################### 
    background=ggplot()+ 
     geom_polygon(data=AG, aes(long, lat, group = group, fill = hole), 
        colour = alpha("black", 0.3), show.legend = FALSE)+ 
     scale_fill_manual(values = c("grey80", "white")) + 
    ####### 
     geom_point(data=plot1, aes(x=Longitude, y=Latitude, size=`Relative Abundance (%)`, 
           color="Red"))+ 
     scale_size_area("`Relative Abundance (%)`")+ 
     facet_wrap(~genus, ncol=4)+ 
     scale_x_continuous("", breaks=NULL) + 
     scale_y_continuous("", breaks=NULL)+ 
     annotate(geom="text", x=53, y=28,label="Iran",color="black", size = 3)+ 
     annotate(geom="text", x=48.5, y=26,label="Saudi \nArabia",color="black", size = 3)+ 
     annotate(geom="text", x=50.6, y=26,label="Bahrain",color="black", size = 3)+ 
     annotate(geom="text", x=51.2, y=25.3,label="Qatar",color="black", size = 3)+ 
     annotate(geom="text", x=56, y=24.5,label="United Arab \nEmirates",color="black", size = 3)+ 
     annotate(geom="text", x=57, y=25.7,label="Strait of \nHormuz",color="black", size = 3) 
    # 
    # 
    background=background +theme_bw()+ 
     ggtitle("PERSIAN GULF") 
    ### 
    background=background + 
     theme(plot.title = element_text(face="bold", size=15, vjust=1), 
      axis.title.y = element_text(face="bold", size=15), 
      axis.title.x =element_blank(), 
      axis.text.x = element_blank(), 
      legend.position = c(.7, .15), 
      #legend.position = "top", 
      legend.title = element_text(colour="black", size=15, face="bold"), 
      legend.text = element_text(colour="black", size=10, face="bold")) 
    # 
    background 
    graph2ppt(file="finalplots.pptx",aspectr=1.3) 

graph2ppt(file="finalplots.pptx",aspectr=1.3)を使用して私のためmy normal plotを働く素敵な複数のグラフを生成するために、このコードを使用すると、私はPPTにエクスポートするために使用するものです。

私は、Ammonia、Asterorotaliaなどの500以上の変数について個別のプロットを作成し、変数名を使用して個々のファイルを保存したり、pptにエクスポートしたりしたいと考えています。私は最初は私がのために謝罪させ、

iho shape fileここ(頭(plot1、10))dputで、シェープファイルが利用可能である
structure(list(Labels = structure(c(1L, 12L, 25L, 27L, 28L, 29L, 
2L, 3L, 4L, 5L), .Label = c("PG 1", "PG 10", "PG 11", "PG 12", 
"PG 13", "PG 14", "PG 15", "PG 16", "PG 17", "PG 18", "PG 19", 
"PG 2", "PG 20", "PG 21", "PG 22", "PG 25", "PG 26", "PG 27", 
"PG 28", "PG 29", "PG 30", "PG 31", "PG 32", "PG 4", "PG 5", 
"PG 6", "PG 7", "PG 8", "PG 9"), class = "factor"), Latitude = c(26.54, 
26.54, 26.4503, 26.3333, 25.8333, 26.4333, 26.1333, 25.975, 26.635, 
26.3), Longitude = c(56.9503, 57, 55.5, 55.5, 54.9667, 54.4833, 
54.4833, 54.4833, 53.9667, 53.9842), Depth = c(0L, 0L, 21L, 23L, 
22L, 18L, 24L, 24L, 28L, 23L), Region = structure(c(2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("North", "South"), class = "factor"), 
    genus = c("Ammonia", "Ammonia", "Ammonia", "Ammonia", "Ammonia", 
    "Ammonia", "Ammonia", "Ammonia", "Ammonia", "Ammonia"), `Relative Abundance (%)` = c(1.79, 
    27.06, 8, 19.65, 3.86, 4.85, 0.35, 1.01, 0.92, 12.24)), .Names = c("Labels", 
"Latitude", "Longitude", "Depth", "Region", "genus", "Relative Abundance (%)" 
), na.action = structure(c(3L, 5L, 61L, 62L, 63L, 64L, 65L, 66L, 
70L, 72L, 77L, 83L, 85L, 86L, 87L, 88L, 89L, 90L, 92L, 93L, 94L, 
95L, 96L, 101L, 102L, 106L, 116L, 119L, 122L, 123L, 134L, 135L, 
136L, 141L, 143L, 146L, 147L, 149L, 151L, 153L, 155L, 156L, 158L, 
159L, 160L, 161L, 163L, 168L, 169L, 171L, 172L, 173L, 175L, 176L, 
178L, 186L, 191L, 192L, 193L, 195L, 196L, 197L, 198L, 199L, 201L, 
202L, 208L, 210L, 213L, 215L, 220L, 233L, 234L, 238L, 239L, 242L, 
244L, 245L, 246L, 248L, 250L, 257L, 259L, 260L, 265L, 266L, 268L, 
269L, 272L, 274L, 275L, 277L, 278L, 281L, 282L), .Names = c("3", 
"5", "61", "62", "63", "64", "65", "66", "70", "72", "77", "83", 
"85", "86", "87", "88", "89", "90", "92", "93", "94", "95", "96", 
"101", "102", "106", "116", "119", "122", "123", "134", "135", 
"136", "141", "143", "146", "147", "149", "151", "153", "155", 
"156", "158", "159", "160", "161", "163", "168", "169", "171", 
"172", "173", "175", "176", "178", "186", "191", "192", "193", 
"195", "196", "197", "198", "199", "201", "202", "208", "210", 
"213", "215", "220", "233", "234", "238", "239", "242", "244", 
"245", "246", "248", "250", "257", "259", "260", "265", "266", 
"268", "269", "272", "274", "275", "277", "278", "281", "282" 
), class = "omit"), row.names = c(1L, 2L, 4L, 6L, 7L, 8L, 9L, 
10L, 11L, 12L), class = "data.frame") 

を次のコードを試してみたが、何も

### 
foram.graph <- function(plot1, na.rm = TRUE, ...){ 

    # create list of genus in data to loop over 
    foram_list <- unique(plot1$genus) 

    # create for loop to produce ggplot2 graphs 
    for (i in seq_along(foram_list)) { 

    # create plot for each genus in plot1 
    forams <- ggplot()+ 

     geom_polygon(data=AG, aes(long, lat, group = group, fill = hole), 
        colour = alpha("black", 0.3), show.legend = FALSE)+ 
     scale_fill_manual(values = c("grey80", "white")) + 
     ######## 
     geom_point(subset(df, plot1$genus==foram_list[i]), 
      aes(x=Longitude, y=Latitude, size=`Relative Abundance (%)`, 
       color="Red")) + 
     scale_size_area("`Relative Abundance (%)`")+ 
     scale_x_continuous("", breaks=NULL) + 
     scale_y_continuous("", breaks=NULL)+ 
     theme_minimal() + 
     ggtitle(paste(foram_list[i])) 
    print(forams) 
    } 
} 
以下

を表示されません長い投稿では、可能な限り再現可能な例を提供したかったのです。私はこれに得ることができるすべての助けに感謝します。ありがとう

+0

のように見え、これは[関数内ggplot保存の重複している可能性がありあり](http://stackoverflow.com/questions/7034647/save-ggplot-within-a-function)。 'ggsave'はあなたにとってうまくいかないのですか? – steveb

+0

実際、コードは再現性がありません。まず、かなりの数のパッケージをロードする必要があります。第2に、 'withoutPG3,23,24.txt'へのアクセス権がないため、最初のコードセグメントを実行することはできません。第3に、出力データには1つの属しか含まれていないので、 'foram.graph'関数のテストには制限があります。 –

+0

@steveb、これは同じ問題ではない[前の質問](@stackoverflow.com/questions/7034647/save-ggplot-within-a-function) – Hammao

答えて

2

これは一連のプロットをpngプロットとして保存します。私はdputのデータを変更して2つの属、したがって2つのプロットがあるようにしました。 (私は、関数の目的のわからない。)

library(ggplot2) 
library(rgdal) 
library(rgeos) 
library(maptools) 

# Loading the Persian Gulf shapefile 
PG <- readShapePoly("iho.shp") 
PG <- readOGR(dsn = ".", "iho") 

# convert to dataframe 
AG <- fortify(PG) 

# Modify your dput data so that there are two genera 
plot1$genus = rep(c("AAA", "BBB"), 1) 

    # create list of genus in data to loop over 
    foram_list <- unique(plot1$genus) 

    # create for loop to produce ggplot2 graphs 
    for (i in seq_along(foram_list)) { 
    df = subset(plot1, genus == foram_list[i]) 

    # create plot for each genus in plot1 
    forams <- ggplot() + 

    geom_polygon(data=AG, aes(long, lat, group = group, fill = hole), 
     colour = alpha("black", 0.3), show.legend = FALSE) + 
     scale_fill_manual(values = c("grey80", "white")) + 
     ######## 
     geom_point(data = df, 
      aes(x=Longitude, y=Latitude, size=`Relative Abundance (%)`, 
       color="Red")) + 
     scale_size_area("`Relative Abundance (%)`")+ 
     scale_x_continuous("", breaks=NULL) + 
     scale_y_continuous("", breaks=NULL)+ 
     theme_minimal() + 
     ggtitle(foram_list[i]) 

png(paste0(foram_list[i], ".png"), 4, 4, "in", res = 100) 
print(forams) 
dev.off() 
} 

OR:あなたはggplotオブジェクトを保存したい場合は、私は名前のリストに保存します。ここで

# create list of genus in data to loop over 
foram_list <- unique(plot1$genus) 

# Initialise the list 
forams = list() 

# create for loop to produce ggplot2 graphs 
for (i in seq_along(foram_list)) { 

    df = subset(plot1, genus == foram_list[i]) 

    # create plot for each genus in plot1 
    forams[[i]] <- ggplot() + 

     geom_polygon(data=AG, aes(long, lat, group = group, fill = hole), 
        colour = alpha("black", 0.3), show.legend = FALSE) + 
     scale_fill_manual(values = c("grey80", "white")) + 

     geom_point(data = df, 
      aes(x=Longitude, y=Latitude, size=`Relative Abundance (%)`, 
       color="Red")) + 
     scale_size_area("`Relative Abundance (%)`")+ 
     scale_x_continuous("", breaks=NULL) + 
     scale_y_continuous("", breaks=NULL)+ 
     theme_minimal() + 
     ggtitle(foram_list[i]) 
} 

names(forams) = foram_list 

forams[["AAA"]] 
forams[["BBB"]] 
+0

あなたの最初の答えが働いた...私は仕事に2番目の部分を得ることができませんでした。私はpptにオブジェクトとして保存するように最初の答えを少し修正しました... – Hammao

0

は場合の私の最終的なコード、誰もがそれを有用見つけ、私が正しくあなたの質問を理解していれば、プロットは、このsample image from the ppt file

library(ggplot2) 
    library(maptools) 
    library (rgdal) 
    library (rgeos) 
    library(export) 
    library(ReporteRs) 
    library(ReporteRsjars) 
    library(rtable) 
    library(xtable) 
    library(taRifx) 
    library(tidyr) 
    library(dplyr) 
    ######### 
    # create list of genus in data to loop over 
    foram_list <- unique(plot1$genus) 

    # create for loop to produce ggplot2 graphs 
    for (i in seq_along(foram_list)) { 
     df = subset(plot1, genus == foram_list[i]) 

     # create plot for each genus in plot1 
     forams <- ggplot() + 

     geom_polygon(data=AG, aes(long, lat, group = group, fill = hole), 
        colour = alpha("black", 0.3), show.legend = FALSE) + 
     scale_fill_manual(values = c("grey80", "white")) + 
     ######## 
     geom_point(data = df, 
        aes(x=Longitude, y=Latitude, size=`Relative Abundance (%)`, 
         color="Red")) + 
     #scale_radius()+ 
     scale_size_area("`Relative Abundance (%)`")+ 
     scale_x_continuous("", breaks=NULL) + 
     scale_y_continuous("", breaks=NULL)+ 
     theme_minimal() + 
     annotate(geom="text", x=53, y=28,label="Iran",color="black", size = 5)+ 
     annotate(geom="text", x=48.5, y=26,label="Saudi \nArabia",color="black", size = 5)+ 
     annotate(geom="text", x=50.6, y=26,label="Bahrain",color="black", size = 5)+ 
     annotate(geom="text", x=51.2, y=25.3,label="Qatar",color="black", size = 5)+ 
     annotate(geom="text", x=56, y=24.5,label="United Arab \nEmirates",color="black", size = 5)+ 
     annotate(geom="text", x=57, y=25.7,label="Strait of \nHormuz",color="black", size = 5)+ 
     ggtitle(foram_list[i]) 
     # 
     forams=forams + 
      theme(plot.title = element_text(face="italic", size=15, vjust=1), 
       axis.title.y = element_text(family = "Trebuchet MS", color="#666666", face="bold.italic", size=30), 
       #family = "Trebuchet MS", color="#666666", face="bold", 
       axis.title.x =element_blank(), 
       axis.text.x = element_blank(), 
       legend.position = c(.8, .8), 
       #legend.position = "top", 
       legend.title = element_text(colour="black", size=15, face="bold"), 
       legend.text = element_text(colour="black", size=10, face="bold")) 
     # 
     graph2ppt(x=forams,file="forams.pptx",append=TRUE) 
     dev.off() 
    } 
関連する問題