#r #ggplot2 #dplyr #geom-point
#r #ggplot2 #dplyr #геометрическая точка
Вопрос:
Как я мог бы упорядочить переменные так, чтобы они отображались, например, в виде тепловой карты / где они показывают аналогичный шаблон, т. Е.: вверху A и D, затем B, C и внизу E. Хотелось бы избежать выполнения этого вручную, поскольку реальные данные содержат гораздо больше переменных.
Variable1 <- c(rep("A",7), rep("B",7),rep("C",7), rep("D",7), rep("E",7))
Variable2 <- c(rep(1:7, 5))
value <- c(15, 16, 11, 12, 13, 11, 12, 4, 3, 6, 5, 4, 3, 2, 3, 3, 2, 3, 3, 4, 3, 18, 17, 15, 2, 3, 4, 5, 2, 3, 4, 5, 6, 10, 18)
dff <- data.frame(Variable1, Variable2, value)
library(dplyr)
dff <- dff %>%group_by(Variable1)%>%
mutate(scaled_val = scale(value)) %>%
ungroup()
dff$Variable <- factor(dff$Variable1,levels=rev(unique(dff$Variable1)))
ggplot(dff, aes(x = Variable2, y = Variable1, label=NA))
geom_point(aes(size = scaled_val, colour = value))
geom_point(aes(size = scaled_val, colour = value), shape=21, colour="black")
geom_text(hjust = 1, size = 2)
theme_bw()
scale_color_gradient(low = "lightblue", high = "darkblue")
scale_x_discrete(expand=c(1,0))
coord_fixed(ratio=4)
И желаемый:
Если вы посмотрите на тепловую карту с кластеризованными строками по сходству, например: https://3.bp.blogspot.com/-AI2dxe95VHk/TgTJtEkoBgI/AAAAAAAAC5w/XCyBw3qViGA/s400/heatmap_cluster2.png вы видите вверху, что у вас есть строка, шаблоном которой являются первые временные точки по оси x, а затем те, что выше в последних временных точках по оси x..
Что делать: итак, мне интересно, можем ли мы, используя масштабированное значение, сделать так, чтобы верхними были те, у которых более высокое среднее значение в Variable2 (1: 2), затем более высокое среднее значение Variable2 (3: 5), затем Variable2 (6: 7). Дайте мне знать, если я здесь не совсем понятен и могу лучше объяснить.
Комментарии:
1. Не могли бы вы быть немного более конкретным? Какой шаблон вы выбрали?
Ответ №1:
Похоже, вы хотите упорядочить группы A-E на основе их среднего значения. Вы можете сделать это, преобразовав Variable1
в коэффициент с пользовательскими уровнями:
lvls <- names(sort(by(dff$value, dff$Variable1, mean)))
dff$Variable1 <- factor(dff$Variable1, levels = lvls)
Вот решение, которое сортирует группы по which.max
:
peaks <- c(by(dff$value, dff$Variable1, which.max))
lvls <- names(sort(peaks))
dff$Variable1 <- factor(dff$Variable1, levels = lvls)
Комментарии:
1. это построение значений по усредненному среднему значению, но это не совсем то, что я хочу, я отредактировал свой пост внизу с более конкретной информацией, дайте мне знать, если теперь стало яснее или нужно больше деталей. Спасибо!
2. Смотрите мое редактирование. Не совсем тот подход, к которому вы стремитесь, но тот же результат. Вам нужно математическое выражение, которое определяет желаемый порядок.
3. Да, это действительно работает! Большое спасибо. Насколько я понимаю, как именно здесь работает функция which.max? На виньетке написано «определение местоположения первого максимума числового значения». означает ли это, что они организованы ECBAD в зависимости от того, где они имеют максимальное значение (наибольший круг)?
4. Точно, это позиция, которая имеет наибольшее
value
значение