#1. Загрузка данных --------- #Установка пакета для загрузки данных из файлов в формате xlsx. install.packages("readxl", repos = "http://cran.us.r-project.org") #Запуск пакета library("readxl") # Загрузка файла, подготовленного в формате *.xlsx, в таблицу под названием "Soil". Таблицу можно назвать любым именем, но в этом случае необходимо изменить ниже слово "Soil" на ваш вариант. Soil<- read_excel("C:/Users/Denis/Desktop/Ternary plots/R/Chernozem_uzhnyi.xlsx") #Просмотр загруженных данных View(Soil) # Проверка директории, где будут сохряняться результаты расчётов getwd() # Назначение директории, где будут сохряняться результаты расчётов setwd("C:/Users/Denis/Desktop/Ternary plots/R") #2. Расчёт фракций CLAY, SILT, SAND по формуле Шейна --------- #Ссылка: Шейн Е.В. Гранулометрический состав почв: проблемы методов исследования, интерпретации результатов и классификаций // Почвоведение. 2009. №3. С.309-317. # 2.1. Расчёт фракции CLAY (<2 мкм) --------- # С помощью символа присвоения "<-" указываем как будут называться наши переменные в расчетах и какие данные столбцов таблицы "Soil" соответствуют этим переменным. Используя символ “$”, выбираем нужный столбец из таблицы "Soil". FineSilt <- Soil$FineSilt #Фракция 5-1 мкм # Ф<0.002=0.57Ф<0,001+0.43Ф<0,005 ClayRus<- 0.57*Soil$Clay SiltRus<- 0.43*FineSilt CLAY <- (ClayRus+SiltRus) #Просмотр результатов расчета содержания фракции CLAY (< 2 мкм) CLAY # 2.2. Расчет фракции SAND (50-2000 мкм) --------- # С помощью символа присвоения "<-" указываем как будут называться наши переменные в расчетах и какие данные столбцов таблицы "Soil" соответствуют этим переменным. Используя символ “$”, выбираем нужный столбец из таблицы "Soil". CoarseSand_MeduimSand <- Soil$CoarseSand_MeduimSand #Фракция 1000-250 мкм FineSand <- Soil$FineSand #Фракция 250-50 мкм VeryCoarse_CoarseSand <- Soil$VeryCoarse_CoarseSand #Фракция 2000-1000 мкм # Фракция 50-2000 мкм SAND <- (CoarseSand_MeduimSand+FineSand+VeryCoarse_CoarseSand) #Просмотр результатов расчета содержания фракции SAND (50-2000 мкм) SAND # 2.3. Расчет фракции SILT(2-50 мкм) --------- # Фракция 2-50 мкм SILT <- (100-SAND-CLAY) #Просмотр результатов расчета содержания фракции Silt (2-50 мкм) SILT #3. Построение треугольника Ферре и определение гранулометрических классов образцов почвы --------- #3.1. Пакет "soiltexture" ----------- #Установка и запуск пакета "Soiltexture" для определения гранулометрических классов образцов почвы. Установка производится единожды. #Руководство: https://cran.r-project.org/web/packages/soiltexture/vignettes/soiltexture_vignette.pdf install.packages("soiltexture", repos = "http://cran.us.r-project.org") #Запуск пакета "soiltexture" library(soiltexture) #3.1.1. Создание таблицы с результатами расчетов элементарных почвенных частиц ----------- particle_soil1 <- data.frame(CLAY, SILT, SAND) #Просмотр таблицы particle_soil1 #Создание сводной таблицы с обозначение образцов, их глубин и содержанием фракций table.all <- data.frame(Soil$Horizon, Soil$SampleID, Soil$Depth, SAND, SILT, CLAY) #Просмотр сводной таблицы table.all #Экспорт таблицы в файл *.txt с разделителем табуляции write.table(table.all, "C:/Users/Denis/Desktop/Ternary plots/R/Table.all.txt", sep="\t", row.names=FALSE) #3.1.2. Построение треугольника текстурных классов почвы ----------- TernaryPlot1 <- TT.plot(class.sys = "USDA.TT", #Выбор классификации tri.data = particle_soil1, #Источник данных main = "Soil texture triangle", #Название диаграммы cex.axis = 1) #Размер шрифта подписи осей #3.1.3. Изменение градации фракции SILT с 50 на 63 мкм ----------- # Шаг 1. USDA63 <- TT.get("USDA.TT") USDA63[[ "base.css.ps.lim" ]] USDA63[[ "tri.css.ps.lim" ]] # Шаг 2. USDA63[[ "base.css.ps.lim" ]][3] <- 63 USDA63[[ "tri.css.ps.lim" ]][3] <- 63 TT.add( "USDA63.TT" = USDA63 ) # Шаг 3. Построение обновленного треугольника текстурных классов почвы TT.plot( class.sys = "USDA63.TT", # Построение треугольника текстурных классов почвы USDA с границей между SAND и SILT 63 мкм main = "Новая диаграмма", #Название диаграммы cex.axis = 1) #Размер шрифта подписи #Треугольник сохраняется только на время сессии, т.е. до закрытия RStudio. #3.1.4. Оформление диаграммы "Soil texture triangle"----------- #Раскрашивание текстурных квалификаторов почв согласно IUSS Working Group WRB (2015) TT.plot(class.sys = "USDA63.TT", #Треугольник текстурных классов почвы USDA с границей между SAND и SILT 63 мкм tri.data = particle_soil1, #Источник данных class.p.bg.col = c("red","red","red","green","green","green","green","cyan","green","cyan","gold","gold"), #Цвета областей текстурных классов pch = 23, #Вариант 1. Тип маркера для всех образцов #pch = c(1:7), #Вариант 2. Индивидуальный маркер для каждого образца. Удалите знак “#” и поставьте его перед предыдущей строкой кода. cex = 2, #Размер маркера col = "blue", #Вариант 1. Цвет образцов #col = c(1:7), #Вариант 2. Индивидуальные цвета для каждого образца main = "Soil texture triangle", #Название диаграммы cex.axis = 1) #Размер шрифта подписи # Список доступных цветов можно найти по ссылке: #http://www.stat.columbia.edu/~tzheng/files/Rcolor.pdf #Подписи образцов geo<-TT.plot(class.sys = "USDA63.TT", class.p.bg.col = c("red","red","red","green","green","green","green","cyan","green","cyan","gold","gold")) TT.text(tri.data = particle_soil1, geo = geo, labels = Soil$SampleID, #Источник для подписей: столбец 'SampleID' из таблицы 'Soil' font = 1, #Размер шрифта col = "black" #Цвет шрифта ) #3.2. Пакет "plotrix" ----------- #Установка и запуск пакета "plotrix" для определения гранулометрических классов образцов почвы. Установка производится единожды. install.packages("plotrix", repos = "http://cran.us.r-project.org") #Запуск пакета "plotrix" library("plotrix") #3.2.1. Трансформирование таблицы с результатами расчетов элементраных почвенных частиц ----------- particle_soil2 <- data.frame(SAND, SILT, CLAY) names(particle_soil2)[1]<- 'sand' # Переименование первого столбца names(particle_soil2)[2]<- 'silt' # Переименование второго столбца names(particle_soil2)[3]<- 'clay' # Переименование третьего столбца #Просмотр таблицы particle_soil2 #3.2.2. Построение треугольника текстурных классов почвы ----------- #Руководство: https://cran.r-project.org/web/packages/plotrix/plotrix.pdf TernaryPlot2 <- soil.texture(soiltexture=particle_soil2, #Источник данных main="Soil texture triangle", #Название диаграммы at=seq(0.1, 0.9, by=0.1), axis.labels=c("Sand (%)", "Silt (%)", "Clay (%)"), tick.labels=list(l=seq(10, 90, by=10), r=seq(10, 90, by=10), b=seq(10, 90, by=10)), show.names=TRUE, # Отображение названии классов почв show.lines=TRUE, # Отображение границ между классами почв col.names="gray", # Цвет надписей классов почв bg.names=par("bg"), # Расположение надписей классов почв show.grid=TRUE, # Отображение сетки на диаграмме col.axis="black", # Цвет осей col.lines="gray", # Цвет сетки классов почвы col.grid="gray", lty.grid=3, # Цвет и размер сетки на диаграмме show.legend=FALSE, # Отображение легенды label.points=TRUE, # Отображение порядкового номера образца в таблице point.labels=NULL, # Название образцов согласно их порядкового номера col.symbols="black", # Цвет надписи порядкового номера образца pch=21, # Форма маркера cex=2, # Размер маркера bg="red", # Цвет маркера lwd=1) # Ширина линии обводки маркера #3.3. Пакет "ggtern" ----------- #Установка и запуск пакета "ggtern" для определения гранулометрических классов образцов почвы. Установка производится единожды. install.packages("ggtern", repos = "http://cran.us.r-project.org") install.packages("plyr", repos = "http://cran.us.r-project.org") install.packages("grid", repos = "http://cran.us.r-project.org") #Запуск пакетов library(ggtern) library(plyr) library(grid) #3.3.1. Построение треугольника текстурных классов почвы ----------- #Руководство: https://cran.r-project.org/web/packages/#Источник данных/ggtern.pdf #Официальный сайт разработчика: http://www.ggtern.com/2014/01/15/usda-textural-soil-classification/ # Загрузка сетки USDA. data(USDA) # Подпись текстурных классов почвы на диаграмме. USDA.LAB = ddply(USDA, 'Label', function(df){ apply(df[, 1:3], 2, mean) }) # Настройка диаграммы USDA.LAB$Angle = 0 USDA.LAB$Angle[which(USDA.LAB$Label == 'Loamy Sand')] = -35 # Конструирование диаграммы. ggtern(data = USDA, aes(y=Clay, x=Sand, z=Silt)) + coord_tern(L="x",T="y",R="z") + geom_polygon(aes(fill = Label), alpha = 0.75, size = 0.5, color = 'black') + geom_text(data = USDA.LAB, aes(label = Label, angle = Angle), color = 'black', size = 3.5) + theme_rgbw() + theme_clockwise() + theme_showsecondary() + theme_showarrows() + custom_percent("Percent") + theme(legend.justification = c(0, 1), legend.position = c(0, 1)) + guides(fill=FALSE)+ ggtitle("Soil texture triangle") # Название диаграммы #3.3.2. Конструирование таблицы с результатами расчетов элементарных почвенных частиц ----------- particle_soil3 <- data.frame(CLAY, SAND, SILT) #Просмотр таблицы particle_soil3 #3.3.3. Нанесение эксперементальных измерений содержания элементарных частич почвы на диаграмму ----------- TernaryPlot3 <- data.frame(SAND=runif(10),SILT=runif(10),CLAY=runif(10)) last_plot() + geom_point(data=particle_soil3, #Источник данных aes(y=CLAY,x=SAND,z=SILT), #Присваивание координат переменным shape = 19, #Вид маркера colour ="red", #Цвет маркера size = 3) #Размер маркера #Если необходимо на диаграмме разместить один образец, то нужно в источнике данных указать конкретную строку из таблицы last_plot() + geom_point(data=particle_soil3[1,], #Источник данных - первая строка из таблицы aes(y=CLAY,x=SAND,z=SILT), #Присваивание координат переменным shape = 19, #Вид маркера colour ="red", #Цвет маркера size = 3) #Размер маркера