#r #loops #for-loop #ggplot2
#r #петли #для-петли #ggplot2
Вопрос:
Я хочу посмотреть на закономерности в моих данных об отдельных рыбах. Я сделал рабочий график в ggplot для отдельных людей с кодом, приведенным в этом тексте. Здесь я выбираю каждую рыбу с Transmitter
именем столбца . Это означает, что я должен выбирать передатчик для каждого участка, что неэффективно. У меня есть 10 уникальных имен передатчиков, которые я хочу визуализировать в 10 сюжетах, но я хочу зациклить это, чтобы мне не нужно было все копировать и вставлять. Как я могу это автоматизировать? Дополнительный вопрос: Как я могу визуализировать 10 участков (2 участка слева, справа и 5 друг под другом) в R, чтобы я мог быстро сканировать свои участки? Заранее спасибо!
Сюжеты: [![A69-1602-59767][1]][1] [![А69-1602-59768][2]][2]
Код для ggplot, который я использовал:
library(spatialrisk) library(ggplot2) pattern2 lt;- Brpattern[Brpattern$Batch.location == "Medemblik",] pattern2 lt;- points_in_circle(pattern2, lat_center = 52.76098, lon_center = 5.12172, lon = Longitude, lat = Latitude, radius = 1e6) pattern2$distance_m lt;- pattern2$distance_m/1000 colnames(pattern2)[which(names(pattern2) == "distance_m")] lt;- "Distance (km)" ### Fish selection patternME lt;- 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))
Мои данные:
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.stack.imgur.com/weaK2.png [2]: https://i.stack.imgur.com/Yyrp9.png
Комментарии:
1. Не могли бы вы включить эту функцию
points_in_circle()
?2. @Питер, это из
spatialrisk
посылки. Тем не менее вы правы — хорошие вопросы включают все используемые библиотеки R, не являющиеся базовыми.3. Я редактирую свой вопрос. Это должна быть посылка
spatialrisk
4. Где это
patternDO
определено? Не могли бы вы проверить свой вопрос в новом экземпляре R и подтвердить, что он воспроизводим, для него может потребоваться значениеTransmitter == "A69-1602-59768"
. Кроме того, было бы неплохо включить по крайней мере два из 10 графиков, которые вам требуются для создания на основе вопроса.5. Я удалил эту строку, мне жаль, что в ней не было необходимости. Я все еще новичок в R и этом сообществе и должен найти свой путь, используя этот веб-сайт. спасибо вам за ваше терпение :)!
Ответ №1:
Вы можете split
получить данные Transmitter
и создать список графиков.
library(spatialrisk) library(ggplot2) plot_data lt;- 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 lt;- purrr::imap(split(pattern2, pattern2$Transmitter), plot_data)
Отдельные участки могут быть доступны через [[
, например list_of_plots[[1]]
, для 1-го участка, list_of_plots[[2]]
для 2-го и так далее.
Комментарии:
1. Вот как я себе это представлял, как это должно быть! Однако, похоже, что каждый сюжет одинаков. названия передатчиков хорошо меняются, но нанесенные точки неверны
2. чтобы это сработало, вам просто нужно переключиться
patternME lt;- pattern2[pattern2$Transmitter == "A69-1602-59768",]
наpatternME lt;- pattern2[pattern2$Transmitter == unique(pattern2$Transmitter)[x],]
x, а затем выполнить итерацию. В качестве примечания вы можете проверитьcowplot
библиотеку.3. Что вы подразумеваете под: повторите через X? Нужно ли мне по-прежнему вручную заполнять имена передатчиков вместо x?
4.
@DJ
не могли бы вы объяснить, пожалуйста, что вы подразумеваете под повторением через x? Я не могу заставить это работать после вашего предложения.