У цій статті ми розглянемо побудову трикутних діаграм (тренарних графіків), які широко застосовуються для відображення петрографічних та геохімічних властивостей порід. Слід лише нагадати, що існують цілі класифікації, які побудовані на відображенні тривимірного простору (наприклад класифікація груп магматичних порід за О. Н. Заварицьким), що підкреслює значимість цього методу відображення даних.
Побудову трикутних діаграм реалізовано у декількох пакетах. Ми використаємо пакет ade4. На мій погляд - його діаграми виглядають найбільш красивими у порівнянні з іншими.
Сробуємо побудувати трикутну діаграму для вже знайомої нам таблиці granity. У першу чергу треба позбутись значень "NA" у всіх стовпцях, які ми будемо аналізувати. Наша таблиця не дуже велика і майже всі дані присутні, тому можна виконати команду na.omit для всієї таблиці.
>granity_na<- na.omit(granity)
Якщо у Вас в таблиці є стовпці із великою кількістю порожніх значень - доцільніше буде потрібні стовпці перенести в іншу таблицю і вже для неї виконати команду na.omit. Видаленню підлягають всі рядки, які містять хоча б одне значення "NA". Таким чином, від вашої таблиці може залишитись набір векторів нульової довжини.
>granity_na<- na.omit(granity)
Якщо у Вас в таблиці є стовпці із великою кількістю порожніх значень - доцільніше буде потрібні стовпці перенести в іншу таблицю і вже для неї виконати команду na.omit. Видаленню підлягають всі рядки, які містять хоча б одне значення "NA". Таким чином, від вашої таблиці може залишитись набір векторів нульової довжини.
Тепер приступимо до побудови діаграми:
>library(ade4)#завантажуємо пакет ade4
>triangle.plot((data.frame(K2O=granity_na$K2O, Na2O=granity_na$Na2O,
+ SiO2=granity_na$SiO2)))
>triangle.plot((data.frame(K2O=granity_na$K2O, Na2O=granity_na$Na2O,
+ SiO2=granity_na$SiO2)))
![]() |
| Трикутна діаграма із налаштуваннями "за умовчанням" |
Зверніть увагу, що робить команда побудови діаграми, якщо ми використовуємо її параметри за умовчанням: по-перше - вона масштабує графік так, щоб відобразити лише область із наявними точками (порожні частини діаграми відкидаються), по-друге - вона показує на бічному рисунку місце розташування прорисованої області у всьому просторі координат. За масштабування відповідає параметр scale, а за бічний рисунок - параметр show.position. Для того, щоб побудувати "класичну" діаграму із координатами від 0 до 100% для кожного із компонентів, ми повинні відключити параметр scale: scale=FALSE. Для того, щоб позбавитись бічного рисунку - треба відключити параметр show.position: show.position=FALSE. В результаті отримаємо "класичну" трикутну діаграму:
>triangle.plot((data.frame(K2O=granity_na$K2O, Na2O=granity_na$Na2O,
+ SiO2=granity_na$SiO2)), scale=FALSE, show.position=FALSE)
>triangle.plot((data.frame(K2O=granity_na$K2O, Na2O=granity_na$Na2O,
+ SiO2=granity_na$SiO2)), scale=FALSE, show.position=FALSE)
![]() |
| "Класична" трикутна діаграма |
Спробуйте інші параметри функції triangle.plot. Цікавими вам можуть бути параметр addaxes, який відображає положення площини головних компонент і addmean, який за результатами обчислення середніх значень компонентів (перерахованих на 100 відсотків середніх значень) відображає "центральну точку" для даних.
>triangle.plot((data.frame(K2O=granity_na$K2O, Na2O=granity_na$Na2O,
+ SiO2=granity_na$SiO2)), addaxes=TRUE)#будуємо трикутну діаграму
#із параметром addaxes
>triangle.plot((data.frame(K2O=granity_na$K2O, Na2O=granity_na$Na2O,
+ SiO2=granity_na$SiO2)), addmean=TRUE)#будуємо трикутну діаграму
#із параметром addmean
>triangle.plot((data.frame(K2O=granity_na$K2O, Na2O=granity_na$Na2O,
+ SiO2=granity_na$SiO2)), addaxes=TRUE)#будуємо трикутну діаграму
#із параметром addaxes
>triangle.plot((data.frame(K2O=granity_na$K2O, Na2O=granity_na$Na2O,
+ SiO2=granity_na$SiO2)), addmean=TRUE)#будуємо трикутну діаграму
#із параметром addmean
![]() |
| Трикутна діаграма із параметром addaxes |
![]() |
| Трикутна діаграма із параметром addmean |
Але душа бажає більшого! Я, наприклад, хочу, щоб точки на моїх трикутних діаграмах були розфарбовані відповідно до типу (фактор granity$color). Це (і не тільки це) можна реалізувати за допомогою функції triangle.class, яка також реалізована в пакеті ade4:
>triangle.class((data.frame(K2O=granity_na$K2O,Na2O=granity_na$Na2O,
+ SiO2=granity_na$SiO2)), fac=granity_na$PORODA, label=NULL,
+ col=as.character(granity_na$color), cstar=0, cpoint=1.5)
>triangle.class((data.frame(K2O=granity_na$K2O,Na2O=granity_na$Na2O,
+ SiO2=granity_na$SiO2)), fac=granity_na$PORODA, label=NULL,
+ col=as.character(granity_na$color), cstar=0, cpoint=1.5)
![]() |
| Трикутна діаграма із кольоровою класифікацією |
Функцію задано із параметрами не за умовчанням. На що вказують параметри функції triangle.class: (data.frame(K2O=granity_na$K2O, Na2O=granity_na$Na2O, SiO2=granity_na$SiO2)) - що треба виробити зведену таблицю із перелічених стовпців; fac=granity_na$PORODA - на фактор, за яким буде проводитись класифікація точок на графіку; label=NULL - підписи порід виводити не треба (за ними на графіку не буде видно самих точок); col=as.character(granity_na$color) - фактор, відповідно до якого будуть забарвлюватись точки на графіку; cstar=0 - не треба будувати центроїди та сполучення їх зі всіма точками окремих класів; cpoint=1.5 - збільшуємо у півтори рази розмір точок.
Із параметрами за умовчанням функція triangle.class побудує таку трикутну діаграму:
>triangle.class((data.frame(K2O=granity_na$K2O, Na2O=granity_na$Na2O,
+ SiO2=granity_na$SiO2)), fac=granity_na$PORODA,
+ col=as.character(granity_na$color))#функція triangle.class із
#параметрами за умовчанням
>triangle.class((data.frame(K2O=granity_na$K2O, Na2O=granity_na$Na2O,
+ SiO2=granity_na$SiO2)), fac=granity_na$PORODA,
+ col=as.character(granity_na$color))#функція triangle.class із
#параметрами за умовчанням
![]() |
| Трикутна діаграма із кольоровою класифікацією із параметрами за умовчанням |






Немає коментарів:
Дописати коментар