0

I want to look at patterns in my data of individual fish. I made a working plot in ggplot for indiviuduals with the code provided in this text. Here, I select every fish with the columnname Transmitter. This means I have to select the transmitter for every plot, which is not efficient. I have 10 unique Transmitter names which I want to visualise in 10 plots, but I want to loop this so I do not have to copy paste everything. How can I automatise this? Extra question: How can I visualise 10 plots (2 plots left, right and 5 under each other) in R so I can scan my plots quickly? Thanks in advance!

Plots: [![A69-1602-59767][1]][1] [![A69-1602-59768][2]][2]

Code for the ggplot I used:

library(spatialrisk)
library(ggplot2)

pattern2     <- Brpattern[Brpattern$Batch.location == "Medemblik",]
pattern2 <- points_in_circle(pattern2, lat_center = 52.76098, lon_center = 5.12172, lon = Longitude, lat = Latitude, radius = 1e6)
pattern2$distance_m <- pattern2$distance_m/1000
colnames(pattern2)[which(names(pattern2) == "distance_m")] <- "Distance (km)"

### Fish selection
patternME <- pattern2[pattern2$Transmitter == "A69-1602-59768",]
ggplot(patternME, aes(Date, `Distance (km)`))+
  geom_point(aes(colour = Location.Receiver), size=3)+
  scale_x_date(date_breaks = "months", date_labels = "%m-%Y")+
  ggtitle("Batch location Medemblik") + ylab("Distance from batch location (km)") + labs(colour ="A69-1602-59768")+
  theme(plot.title = element_text(hjust = 0.5))

My data:

structure(list(Day = c("29", "30", "31", "01", "02", "03", "04", 
"05", "06", "07", "08", "09", "10", "11", "12", "13", "16", "19", 
"20", "21", "22", "23", "03", "24", "07", "09", "11", "13", "15", 
"16", "17", "18", "20", "21", "08", "24", "25", "26", "27", "28", 
"29", "30", "31", "01", "02", "03", "04", "05", "06", "07", "08", 
"09", "10", "11", "12", "13", "16", "19", "20", "21", "22", "23", 
"30", "01", "02", "03", "04", "05", "22", "24", "25", "26", "27", 
"28", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", 
"11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", 
"22", "08", "25", "01", "02"), Month = c("12", "12", "12", "01", 
"01", "01", "01", "01", "01", "01", "01", "01", "01", "01", "01", 
"01", "01", "01", "01", "01", "01", "01", "02", "02", "03", "03", 
"03", "03", "03", "03", "03", "03", "03", "03", "04", "12", "12", 
"12", "12", "12", "12", "12", "12", "01", "01", "01", "01", "01", 
"01", "01", "01", "01", "01", "01", "01", "01", "01", "01", "01", 
"01", "01", "01", "01", "02", "02", "02", "02", "02", "02", "02", 
"02", "02", "02", "02", "03", "03", "03", "03", "03", "03", "03", 
"03", "03", "03", "03", "03", "03", "03", "03", "03", "03", "03", 
"03", "03", "03", "03", "04", "03", "04", "04"), Year = c("2019", 
"2019", "2019", "2020", "2020", "2020", "2020", "2020", "2020", 
"2020", "2020", "2020", "2020", "2020", "2020", "2020", "2020", 
"2020", "2020", "2020", "2020", "2020", "2020", "2020", "2020", 
"2020", "2020", "2020", "2020", "2020", "2020", "2020", "2020", 
"2020", "2020", "2019", "2019", "2019", "2019", "2019", "2019", 
"2019", "2019", "2020", "2020", "2020", "2020", "2020", "2020", 
"2020", "2020", "2020", "2020", "2020", "2020", "2020", "2020", 
"2020", "2020", "2020", "2020", "2020", "2020", "2020", "2020", 
"2020", "2020", "2020", "2020", "2020", "2020", "2020", "2020", 
"2020", "2020", "2020", "2020", "2020", "2020", "2020", "2020", 
"2020", "2020", "2020", "2020", "2020", "2020", "2020", "2020", 
"2020", "2020", "2020", "2020", "2020", "2020", "2020", "2020", 
"2020", "2020", "2020"), Location.Receiver = c("Ketelmeer 2 (midden) ", 
"Ketelmeer 2 (midden) ", "Ketelmeer 2 (midden) ", "Ketelmeer 2 (midden) ", 
"Ketelmeer 2 (midden) ", "Ketelmeer 2 (midden) ", "Ketelmeer 2 (midden) ", 
"Ketelmeer 2 (midden) ", "Ketelmeer 2 (midden) ", "Ketelmeer 2 (midden) ", 
"Ketelmeer 2 (midden) ", "Ketelmeer 2 (midden) ", "Ketelmeer 2 (midden) ", 
"Ketelmeer 2 (midden) ", "Ketelmeer 2 (midden) ", "Ketelmeer 2 (midden) ", 
"Ketelmeer 2 (midden) ", "Ketelmeer 2 (midden) ", "Ketelmeer 2 (midden) ", 
"Ketelmeer 2 (midden) ", "Ketelmeer 2 (midden) ", "Ketelmeer 2 (midden) ", 
"Ketelmeer 2 (midden) ", "Ketelmeer 2 (midden) ", "Ketelmeer 2 (midden) ", 
"Ketelmeer 2 (midden) ", "Ketelmeer 2 (midden) ", "Ketelmeer 2 (midden) ", 
"Ketelmeer 2 (midden) ", "Ketelmeer 2 (midden) ", "Ketelmeer 2 (midden) ", 
"Ketelmeer 2 (midden) ", "Ketelmeer 2 (midden) ", "Ketelmeer 2 (midden) ", 
"Ketelmeer 2 (midden) ", "Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", 
"Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", 
"Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", 
"Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", 
"Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", 
"Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", 
"Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", 
"Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", 
"Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", 
"Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", 
"Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", 
"Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", 
"Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", 
"Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", 
"Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", 
"Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", 
"Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", 
"Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", 
"Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", 
"Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", 
"Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", "Ketelmeer 3 (noord) ", 
"Ijssel Ijssel", "Ijssel Ijssel", "Ijssel Ijssel"), Transmitter = c("A69-1602-59759", 
"A69-1602-59759", "A69-1602-59759", "A69-1602-59759", "A69-1602-59759", 
"A69-1602-59759", "A69-1602-59759", "A69-1602-59759", "A69-1602-59759", 
"A69-1602-59759", "A69-1602-59759", "A69-1602-59759", "A69-1602-59759", 
"A69-1602-59759", "A69-1602-59759", "A69-1602-59759", "A69-1602-59759", 
"A69-1602-59759", "A69-1602-59759", "A69-1602-59759", "A69-1602-59759", 
"A69-1602-59759", "A69-1602-59759", "A69-1602-59759", "A69-1602-59759", 
"A69-1602-59759", "A69-1602-59759", "A69-1602-59759", "A69-1602-59759", 
"A69-1602-59759", "A69-1602-59759", "A69-1602-59759", "A69-1602-59759", 
"A69-1602-59759", "A69-1602-59759", "A69-1602-59759", "A69-1602-59759", 
"A69-1602-59759", "A69-1602-59759", "A69-1602-59759", "A69-1602-59759", 
"A69-1602-59759", "A69-1602-59759", "A69-1602-59759", "A69-1602-59759", 
"A69-1602-59759", "A69-1602-59759", "A69-1602-59759", "A69-1602-59759", 
"A69-1602-59759", "A69-1602-59759", "A69-1602-59759", "A69-1602-59759", 
"A69-1602-59759", "A69-1602-59759", "A69-1602-59759", "A69-1602-59759", 
"A69-1602-59759", "A69-1602-59759", "A69-1602-59759", "A69-1602-59759", 
"A69-1602-59759", "A69-1602-59759", "A69-1602-59759", "A69-1602-59759", 
"A69-1602-59759", "A69-1602-59759", "A69-1602-59759", "A69-1602-59759", 
"A69-1602-59759", "A69-1602-59759", "A69-1602-59759", "A69-1602-59759", 
"A69-1602-59759", "A69-1602-59759", "A69-1602-59759", "A69-1602-59759", 
"A69-1602-59759", "A69-1602-59759", "A69-1602-59759", "A69-1602-59759", 
"A69-1602-59759", "A69-1602-59759", "A69-1602-59759", "A69-1602-59759", 
"A69-1602-59759", "A69-1602-59759", "A69-1602-59759", "A69-1602-59759", 
"A69-1602-59759", "A69-1602-59759", "A69-1602-59759", "A69-1602-59759", 
"A69-1602-59759", "A69-1602-59759", "A69-1602-59759", "A69-1602-59759", 
"A69-1602-59759", "A69-1602-59759", "A69-1602-59759"), Batch.location = c("Medemblik", 
"Medemblik", "Medemblik", "Medemblik", "Medemblik", "Medemblik", 
"Medemblik", "Medemblik", "Medemblik", "Medemblik", "Medemblik", 
"Medemblik", "Medemblik", "Medemblik", "Medemblik", "Medemblik", 
"Medemblik", "Medemblik", "Medemblik", "Medemblik", "Medemblik", 
"Medemblik", "Medemblik", "Medemblik", "Medemblik", "Medemblik", 
"Medemblik", "Medemblik", "Medemblik", "Medemblik", "Medemblik", 
"Medemblik", "Medemblik", "Medemblik", "Medemblik", "Medemblik", 
"Medemblik", "Medemblik", "Medemblik", "Medemblik", "Medemblik", 
"Medemblik", "Medemblik", "Medemblik", "Medemblik", "Medemblik", 
"Medemblik", "Medemblik", "Medemblik", "Medemblik", "Medemblik", 
"Medemblik", "Medemblik", "Medemblik", "Medemblik", "Medemblik", 
"Medemblik", "Medemblik", "Medemblik", "Medemblik", "Medemblik", 
"Medemblik", "Medemblik", "Medemblik", "Medemblik", "Medemblik", 
"Medemblik", "Medemblik", "Medemblik", "Medemblik", "Medemblik", 
"Medemblik", "Medemblik", "Medemblik", "Medemblik", "Medemblik", 
"Medemblik", "Medemblik", "Medemblik", "Medemblik", "Medemblik", 
"Medemblik", "Medemblik", "Medemblik", "Medemblik", "Medemblik", 
"Medemblik", "Medemblik", "Medemblik", "Medemblik", "Medemblik", 
"Medemblik", "Medemblik", "Medemblik", "Medemblik", "Medemblik", 
"Medemblik", "Medemblik", "Medemblik", "Medemblik"), BatchNr = c(1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), Latitude = c(52.60896, 
52.60896, 52.60896, 52.60896, 52.60896, 52.60896, 52.60896, 52.60896, 
52.60896, 52.60896, 52.60896, 52.60896, 52.60896, 52.60896, 52.60896, 
52.60896, 52.60896, 52.60896, 52.60896, 52.60896, 52.60896, 52.60896, 
52.60896, 52.60896, 52.60896, 52.60896, 52.60896, 52.60896, 52.60896, 
52.60896, 52.60896, 52.60896, 52.60896, 52.60896, 52.60896, 52.61161, 
52.61161, 52.61161, 52.61161, 52.61161, 52.61161, 52.61161, 52.61161, 
52.61161, 52.61161, 52.61161, 52.61161, 52.61161, 52.61161, 52.61161, 
52.61161, 52.61161, 52.61161, 52.61161, 52.61161, 52.61161, 52.61161, 
52.61161, 52.61161, 52.61161, 52.61161, 52.61161, 52.61161, 52.61161, 
52.61161, 52.61161, 52.61161, 52.61161, 52.61161, 52.61161, 52.61161, 
52.61161, 52.61161, 52.61161, 52.61161, 52.61161, 52.61161, 52.61161, 
52.61161, 52.61161, 52.61161, 52.61161, 52.61161, 52.61161, 52.61161, 
52.61161, 52.61161, 52.61161, 52.61161, 52.61161, 52.61161, 52.61161, 
52.61161, 52.61161, 52.61161, 52.61161, 52.61161, 52.58222, 52.58222, 
52.58222), Longitude = c(5.65573, 5.65573, 5.65573, 5.65573, 
5.65573, 5.65573, 5.65573, 5.65573, 5.65573, 5.65573, 5.65573, 
5.65573, 5.65573, 5.65573, 5.65573, 5.65573, 5.65573, 5.65573, 
5.65573, 5.65573, 5.65573, 5.65573, 5.65573, 5.65573, 5.65573, 
5.65573, 5.65573, 5.65573, 5.65573, 5.65573, 5.65573, 5.65573, 
5.65573, 5.65573, 5.65573, 5.66058, 5.66058, 5.66058, 5.66058, 
5.66058, 5.66058, 5.66058, 5.66058, 5.66058, 5.66058, 5.66058, 
5.66058, 5.66058, 5.66058, 5.66058, 5.66058, 5.66058, 5.66058, 
5.66058, 5.66058, 5.66058, 5.66058, 5.66058, 5.66058, 5.66058, 
5.66058, 5.66058, 5.66058, 5.66058, 5.66058, 5.66058, 5.66058, 
5.66058, 5.66058, 5.66058, 5.66058, 5.66058, 5.66058, 5.66058, 
5.66058, 5.66058, 5.66058, 5.66058, 5.66058, 5.66058, 5.66058, 
5.66058, 5.66058, 5.66058, 5.66058, 5.66058, 5.66058, 5.66058, 
5.66058, 5.66058, 5.66058, 5.66058, 5.66058, 5.66058, 5.66058, 
5.66058, 5.66058, 5.86477, 5.86477, 5.86477), Date = structure(c(18259, 
18260, 18261, 18262, 18263, 18264, 18265, 18266, 18267, 18268, 
18269, 18270, 18271, 18272, 18273, 18274, 18277, 18280, 18281, 
18282, 18283, 18284, 18295, 18316, 18328, 18330, 18332, 18334, 
18336, 18337, 18338, 18339, 18341, 18342, 18360, 18254, 18255, 
18256, 18257, 18258, 18259, 18260, 18261, 18262, 18263, 18264, 
18265, 18266, 18267, 18268, 18269, 18270, 18271, 18272, 18273, 
18274, 18277, 18280, 18281, 18282, 18283, 18284, 18291, 18293, 
18294, 18295, 18296, 18297, 18314, 18316, 18317, 18318, 18319, 
18320, 18322, 18323, 18324, 18325, 18326, 18327, 18328, 18329, 
18330, 18331, 18332, 18333, 18334, 18335, 18336, 18337, 18338, 
18339, 18340, 18341, 18342, 18343, 18360, 18346, 18353, 18354
), class = "Date"), `Distance (km)` = c(39.8114372187258, 39.8114372187258, 
39.8114372187258, 39.8114372187258, 39.8114372187258, 39.8114372187258, 
39.8114372187258, 39.8114372187258, 39.8114372187258, 39.8114372187258, 
39.8114372187258, 39.8114372187258, 39.8114372187258, 39.8114372187258, 
39.8114372187258, 39.8114372187258, 39.8114372187258, 39.8114372187258, 
39.8114372187258, 39.8114372187258, 39.8114372187258, 39.8114372187258, 
39.8114372187258, 39.8114372187258, 39.8114372187258, 39.8114372187258, 
39.8114372187258, 39.8114372187258, 39.8114372187258, 39.8114372187258, 
39.8114372187258, 39.8114372187258, 39.8114372187258, 39.8114372187258, 
39.8114372187258, 39.9833461407132, 39.9833461407132, 39.9833461407132, 
39.9833461407132, 39.9833461407132, 39.9833461407132, 39.9833461407132, 
39.9833461407132, 39.9833461407132, 39.9833461407132, 39.9833461407132, 
39.9833461407132, 39.9833461407132, 39.9833461407132, 39.9833461407132, 
39.9833461407132, 39.9833461407132, 39.9833461407132, 39.9833461407132, 
39.9833461407132, 39.9833461407132, 39.9833461407132, 39.9833461407132, 
39.9833461407132, 39.9833461407132, 39.9833461407132, 39.9833461407132, 
39.9833461407132, 39.9833461407132, 39.9833461407132, 39.9833461407132, 
39.9833461407132, 39.9833461407132, 39.9833461407132, 39.9833461407132, 
39.9833461407132, 39.9833461407132, 39.9833461407132, 39.9833461407132, 
39.9833461407132, 39.9833461407132, 39.9833461407132, 39.9833461407132, 
39.9833461407132, 39.9833461407132, 39.9833461407132, 39.9833461407132, 
39.9833461407132, 39.9833461407132, 39.9833461407132, 39.9833461407132, 
39.9833461407132, 39.9833461407132, 39.9833461407132, 39.9833461407132, 
39.9833461407132, 39.9833461407132, 39.9833461407132, 39.9833461407132, 
39.9833461407132, 39.9833461407132, 39.9833461407132, 53.9604508112108, 
53.9604508112108, 53.9604508112108)), row.names = c(570298L, 
565084L, 563855L, 530554L, 552942L, 525810L, 552035L, 539968L, 
560812L, 529808L, 581237L, 567584L, 532850L, 578746L, 528980L, 
563420L, 576765L, 581972L, 571917L, 539528L, 549080L, 543315L, 
558992L, 562414L, 570063L, 581171L, 540686L, 580895L, 578984L, 
537421L, 566652L, 575695L, 560280L, 527067L, 540127L, 567792L, 
528656L, 549569L, 565553L, 560968L, 539858L, 572394L, 576133L, 
576947L, 534319L, 543011L, 528409L, 557659L, 575278L, 541422L, 
573611L, 531816L, 561909L, 567161L, 526719L, 526669L, 552503L, 
579272L, 570394L, 576650L, 556779L, 559094L, 553772L, 531240L, 
561776L, 581170L, 545572L, 548139L, 580422L, 552737L, 538357L, 
574885L, 562474L, 549462L, 556328L, 533075L, 560331L, 543957L, 
560719L, 529318L, 534122L, 567029L, 532939L, 525323L, 549903L, 
567378L, 581894L, 528378L, 543621L, 539881L, 556999L, 572109L, 
547942L, 537720L, 545126L, 547950L, 537362L, 576813L, 532197L, 
548260L), class = "data.frame")


  [1]: https://i.sstatic.net/weaK2.png
  [2]: https://i.sstatic.net/Yyrp9.png
5
  • 2
    Could you include the function points_in_circle() ? Commented Dec 6, 2021 at 11:22
  • 1
    @Peter it is from the spatialrisk package. Still you are correct - good questions include all non-base R libraries used. Commented Dec 6, 2021 at 11:29
  • I edit my question. It should be the package spatialrisk Commented Dec 6, 2021 at 11:29
  • 1
    Where is patternDO defined? Could you check your question in a fresh instance of R and confirm it is reproducible, it might need a value for Transmitter == "A69-1602-59768". Also it would be a good idea to enable at least two of the 10 plots you require to be generated from the question. Commented Dec 6, 2021 at 11:35
  • I removed that line, I am sorry that one was not neccessary. I am still new to R and this community and have to find my way using this website. thank you for your patience :)! Commented Dec 6, 2021 at 11:41

1 Answer 1

1

You can split the data by Transmitter and create a list of plots.

library(spatialrisk)
library(ggplot2)

plot_data <- function(data, title) {
  
ggplot(data, aes(Date, `Distance (km)`))+
  geom_point(aes(colour = Location.Receiver), size=3)+
  scale_x_date(date_breaks = "months", date_labels = "%m-%Y")+
  ggtitle("Batch location Medemblik") + 
    ylab("Distance from batch location (km)") + 
    labs(colour = title)+
  theme(plot.title = element_text(hjust = 0.5))
}

list_of_plots <- purrr::imap(split(pattern2, pattern2$Transmitter), plot_data)

Individual plots can be accessed via [[ i.e list_of_plots[[1]] for the 1st plot, list_of_plots[[2]] for the 2nd one and so on.

Sign up to request clarification or add additional context in comments.

4 Comments

This is how I pictured it how it suppose to be! However, It seems that every plot is the same. the Transmitter names change nicely but the plotted points are incorrect
to make it work you just have to change patternME <- pattern2[pattern2$Transmitter == "A69-1602-59768",] to patternME <- pattern2[pattern2$Transmitter == unique(pattern2$Transmitter)[x],] and then iterate through x. as a side note you might want to check out the cowplot library.
What do you mean by: iterate through X? Do I still need to manually fill the transmitter names in the place of x?
@DJ can you explain please what you mean by iterate through x? I am unable to make it work after your suggestion.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.