Для исследовательской работы по проблемам ядерных отходов я пытаюсь составить тепловую карту « Атрибуты » (в X) и « Модели » (в Y) с некоторыми дискретными значения даны (в Z, раскрашивание) для каждой (X, Y) пары. Я делаю все это для разных " Сценариев ".
Мой набор данных выглядит так:
head(tspa)
ï..Scenarios Components
1 Total System (10,000 years) Unsaturated Zone Flow
2 Total System (10,000 years) Unsaturated Zone Flow
3 Total System (10,000 years) Unsaturated Zone Flow
4 Total System (10,000 years) Unsaturated Zone Flow
5 Total System (10,000 years) Unsaturated Zone Flow
6 Total System (10,000 years) EBS Environment
Models WTYPE WCOMP WRAD WPROP WTREAT WFORM
1 Site-Scale UZ Flow 0 0 0 0 0 0
2 Infiltration Analysis 0 0 0 0 0 0
3 Climate Analysis 0 0 0 0 0 0
4 Drift Seepage 0 0 0 0 0 0
5 Drift Wall Condensation 0 0 0 0 0 0
6 EBS Thermal-Hydrologic Environment 0 0 0 0 0 1
WPACKAGE STRUCT OVERPACK ROCK GEOPHYS GEOCHEM HYDRO BIO SEISM VOLCA
1 0 0 0 1 0 0 1 0 0 0
2 0 0 0 1 0 0 1 0 0 0
3 0 0 0 0 0 0 0 0 0 0
4 0 1 0 1 0 0 1 0 0 0
5 0 1 0 0 0 0 1 0 0 0
6 1 1 0 0 1 0 1 0 0 0
CLIMA HUMAN
1 0 0
2 0 0
3 1 0
4 0 0
5 0 0
6 0 0
Примечания к данным:
- Полный набор данных можно найти здесь: tspa.csv
- Метки заглавными буквами соответствуют атрибутам, остальные
должно быть явным.
- Символ "ï .." добавляется в первую ячейку "Сценарии", когда
импорт базы данных csv в R (используя R Studio). Я понятия не имею
откуда эта ошибка (кодировка моего CSV-файла?)?
В идеале это должны быть просто «сценарии».
А вот мой «рабочий» скрипт на данный момент:
# Heatmap 2
# Load dependancies
library(tidyr) # consistent data.frame cleaning
library(ggplot2) # base plots are for Coursera professors
library(gridExtra) # a helper for arranging individual ggplot objects
library(ggthemes) # has a clean theme for ggplot2
# Read data and format for heatmap
tspa <- read.csv(file="tspa3.csv",header=TRUE,sep=",")
tspa.long <- gather(data = tspa, key = Attributes.name, value = Attributes.value, -c(1:3))
gg <- ggplot(data = tspa.long, mapping = aes(x = factor(Attributes.name, levels = unique(Attributes.name)),
y = factor(Models, levels = unique(Models)),
fill = Attributes.value), stat="identity")
gg <- gg + facet_wrap(~ ï..Scenarios , ncol=6)
gg <- gg + geom_tile(color="grey", size=0.1)
gg <- gg + coord_equal()
gg <- gg + scale_y_discrete(limits = rev(levels(tspa.long$Models)))
gg <- gg + labs(x=NULL, y=NULL, title=NULL)
gg <- gg + theme(plot.title=element_text(hjust=0))
gg <- gg + theme(axis.ticks=element_blank())
gg <- gg + theme(axis.text=element_text(size=7))
gg <- gg + theme(axis.text.x=element_text(angle=90))
gg <- gg + theme(legend.position = "none")
gg <- gg + scale_fill_gradient2(low="white", high=muted("red"), limits=range(tspa.long$Attributes.value))
gg
Этот сценарий генерирует следующую тепловую карту с огранкой только для сценария: Результат
Тем не менее, даже после тщательного поиска по теме и попытки различных подходов (ggplot2, перегрев, тепловая карта, карта pheatmap ...), я по-прежнему не могу построить именно то, что мне нужно.
Вот с чем я борюсь:
- Помимо огранки сценариев, как огранить (сгруппировать) атрибуты (X, по категориям) и модели (Y, по компонентам), которые все иерархически организованы? (ссылки на мои наборы данных) «Модели к компонентам», и у меня есть еще один файл данных, связывающий «Атрибуты с категориями») - На фасетировании я попытался this , this и that .
- Внутри каждого фасета (атрибуты, модели и сценарии), как сохранить порядок меток, как показано в моем файле данных , а не в алфавитном порядке? - На данный момент правильно упорядочены только атрибуты, но не модели и сценарии.
- Можно ли выделить или изменить цвет меток X и Y для заданного значения Z?
Поскольку я довольно плохо знаком с R и с визуализацией данных в целом, у меня все еще ограниченное понимание того, как именно работает R-код. Я подозреваю, что мне, возможно, придется использовать различные кадры данных или циклы IF / THEN, но я не знаю, как это сделать.
У меня все в порядке с общим руководством о том, какую архитектуру и функции использовать для моего набора данных и сценария, которые я смогу выяснить сам позже. Спасибо!