I do not have experience with loops but it looks like I will need to create some of them to analyze my data properly. Could you show how to create a simple loop on the code which I already created ? Let's use looping to get some plots:
pdf(file = sprintf("complex I analysis", tbl_comp_abu1), paper='A4r')
ggplot(df_tbl_data1_comp1, aes(Size_Range, Abundance, group=factor(Gene_Name))) +
theme(legend.title=element_blank()) +
geom_line(aes(color=factor(Gene_Name))) +
ggtitle("Data1 - complex I")+
theme(axis.text.x = element_text(angle = 90, hjust = 1))
ggplot(df_tbl_data2_comp1, aes(Size_Range, Abundance, group=factor(Gene_Name))) +
theme(legend.title=element_blank()) +
geom_line(aes(color=factor(Gene_Name))) +
ggtitle("Data2 - complex I")+
theme(axis.text.x = element_text(angle = 90, hjust = 1))
ggplot(df_tbl_data3_comp1, aes(Size_Range, Abundance, group=factor(Gene_Name))) +
theme(legend.title=element_blank()) +
geom_line(aes(color=factor(Gene_Name))) +
ggtitle("Datas3 - complex I")+
theme(axis.text.x = element_text(angle = 90, hjust = 1))
dev.off()
The question now is what I would like to achieve. So first of all I have like 10 complexes to analyze so that means 10 pdf files should be created and the example shows plots from three different data sets for the complex one. To make it properly the number in variable comp1
(from df_tbl_dataX_comp1
) has to be changed from 1 to 10 - depends which complex we want to plot. The next thing which has to be changed through the loop is the name of pdf file and each of graphs... Is it possible to write such loop ?
Data:
structure(list(Size_Range = structure(c(1L, 1L, 1L, 2L, 2L, 2L,
3L, 3L, 3L, 4L, 4L, 4L, 5L, 5L, 5L, 6L, 6L, 6L, 7L, 7L, 7L, 8L,
8L, 8L, 9L, 9L, 9L, 10L, 10L, 10L, 11L, 11L, 11L, 12L, 12L, 12L,
13L, 13L, 13L, 14L, 14L, 14L, 15L, 15L, 15L, 16L, 16L, 16L, 17L,
17L, 17L, 18L, 18L, 18L, 19L, 19L, 19L, 20L, 20L, 20L), .Label = c("10",
"34", "59", "84", "110", "134", "165", "199", "234", "257", "362",
"433", "506", "581", "652", "733", "818", "896", "972", "1039"
), class = "factor"), Abundance = c(0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 142733.475, 108263.525, 98261.11, 649286.165,
3320759.803, 3708515.148, 6691260.945, 30946562.92, 180974.3725,
4530005.805, 21499827.89, 0, 15032198.54, 4058060.583, 0, 3842964.97,
2544030.857, 0, 1640476.977, 286249.1775, 0, 217388.5675, 1252965.433,
0, 1314666.05, 167467.8825, 0, 253798.15, 107244.9925, 0, 207341.1925,
15755.485, 0, 71015.85, 14828.5075, 0, 25966.2325, 0, 0, 0, 0,
0, 0), Gene_Name = c("AT1G01080", "AT1G01090", "AT1G01320", "AT1G01420",
"AT1G01470", "AT1G01560", "AT1G01800", "AT1G02150", "AT1G02500",
"AT1G02560", "AT1G02780", "AT1G02880", "AT1G02920", "AT1G02930",
"AT1G03030", "AT1G03090", "AT1G03110", "AT1G03130", "AT1G03220",
"AT1G03230", "AT1G03330", "AT1G03475", "AT1G03630", "AT1G03680",
"AT1G03870", "ATCG00420", "ATCG00470", "ATCG00480", "ATCG00490",
"ATCG00500", "ATCG00650", "ATCG00660", "ATCG00670", "ATCG00740",
"ATCG00750", "ATCG00842", "ATCG01100", "ATCG01030", "ATCG01114",
"ATCG01665", "ATCG00770", "ATCG00780", "ATCG00800", "ATCG00810",
"ATCG00820", "ATCG00722", "ATCG00744", "ATCG00855", "ATCG00853",
"ATCG00888", "ATCG00733", "ATCG00766", "ATCG00812", "ATCG00821",
"ATCG00856", "ATCG00830", "ATCG00900", "ATCG01060", "ATCG01110",
"ATCG01120")), .Names = c("Size_Range", "Abundance", "Gene_Name"
), row.names = c(NA, -60L), class = "data.frame")
Have a look at the following R syntax: for( i in 2: ncol ( data)) { # Printing ggplot within for-loop print ( ggplot ( data, aes ( x = x, y = data [ , i])) + geom_point ()) Sys.sleep(2) } Figure 2: Showing ggplot2 Plots within for-Loop using print () Function.
Example: Creating ggplot2 Plot with Two Different Data Frames You have to specify NULL within the ggplot function. Then, you have to specify the different data sets within the geom_point and geom_line functions. my_plot <- ggplot (NULL) + # Printing ggplot2 grphic based on 2 data sets geom_point (data = iris, aes (x = Sepal.
The other way how you can simplify repetitive plotting tasks, is by making your own custom plot themes. Since every plot theme in ggplot2 is a function, you can easily save your favorite theme settings as a custom-made function. Making a theme is easier than writing functions to generate multiple plots, as you won’t have to write any loops.
Then a for loop is used to iterate over all of the columns in the list nm, using the seq_along () function. The next step is to write the ggplot instructions and assign them to a temporary object (called plots ).
This might do the trick:
Initiate two loops, one for the complex iteration and a second for the dataset iteration. Then use paste0()
or paste()
to generate the correct filenames and headings.
PS.: I didn't test the code, since I dont have your data. But it should give you an idea.
#loop over complex
for (c in 1:10) {
#create pdf for every complex
pdf(file = paste0("complex", c, "analysis.pdf"), paper='A4r')
#loop over datasets
for(d in 1:3) {
#plot
ggplot(get(paste0("df_tbl_data",d,"_comp",c)), aes(Size_Range, Abundance, group=factor(Gene_Name))) +
theme(legend.title=element_blank()) +
geom_line(aes(color=factor(Gene_Name))) +
ggtitle(paste0("Data",d," - complex ",c))+
theme(axis.text.x = element_text(angle = 90, hjust = 1))
}
dev.off()
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With