Как построить тепловую карту в ggplot со смещенными точками

Я пытаюсь графически представить «тепловые» данные для каждой из этих точек, то есть одномерное целое число для каждой позиции.

Изображение:

введите здесь описание изображения

У меня пока нет данных, но они будут такими, где, по согласованию с получателем данных, я сместил положения по оси x, чтобы помочь мне понять в пространстве, на что я смотрю (где x и y фактически совпадают). -координаты T - температура).

x   y   T
1   1   5
3   1   5
5   1   6
7   1   5
9   1   6
11  1   7
2   2   7
4   2   5
6   2   4
8   2   5
10  2   6
1   3   7
3   3   8
5   3   8
7   3   7
9   3   8
11  3   9
2   4   9
4   4   13
6   4   13
8   4   9
10  4   9

Как я могу лучше всего визуально представить эту тепловую карту с помощью ggplot (или аналогичного инструмента), пожалуйста? Я просто собирался иметь поля с пробелами (так как, например, (1,2) не существует), но команда проекта этого не хочет!

Мне все равно, круглые ли точки, подойдет квадрат/прямоугольник.

Заранее спасибо, надеюсь мой вопрос был понятен.


person SNOYL    schedule 17.08.2017    source источник
comment
Если команде проекта не нужны пустые места, что именно нужно вам? Уточните желаемый результат, чтобы можно было ответить на вопрос. Каковы конкретные требования?   -  person MrFlick    schedule 17.08.2017
comment
На изображении, поскольку сосуды круглые, они, естественно, расположены в шахматном порядке при укладке друг на друга, поэтому я хочу изобразить это положение в шахматном порядке. У меня есть точки данных для каждой позиции (не только для отмеченных, извините, если это сбивает с толку)   -  person SNOYL    schedule 17.08.2017
comment
Но как график узнает, какие значения отсутствуют, а какие значения не существуют? Каков диапазон x и y?   -  person MrFlick    schedule 17.08.2017
comment
Там будет измерение для каждого флакона. Таким образом, у меня будет x от 1 до 17 и y от 1 до 19. Могут быть нечетные отсутствующие (или выбросы), которые я могу удалить, но у меня должны быть все данные для всей стопки флаконов.   -  person SNOYL    schedule 17.08.2017
comment
Если я нарисую их как тепловую карту с (xy), которые у меня есть, я получу шахматную доску с отсутствующими / тепловыми данными, и я хочу избежать этого (по запросу команды)   -  person SNOYL    schedule 17.08.2017


Ответы (2)


Я бы обновил ответ @TTNK, чтобы использовать круглые точки, такие как ваши бочки, и исправить координаты, чтобы они соответствовали круглой упаковке, а не квадратам.

  ggplot(df, aes(x, y, fill = Temp)) +
  geom_point(shape = 21, size = 21, stroke = 3) + 
  scale_y_continuous(expand = c(0.25,0)) +
  scale_x_continuous(breaks = 1:11, expand = c(0.25,0)) +
  coord_fixed(ratio = tan(pi/3)) +
  theme_classic()

введите здесь описание изображения

Хотя это приблизит вас к вашей схеме, вам придется возиться с аргументами size = и stroke =, чтобы ваши стволы просто соприкасались. Если вы хотите, чтобы это было автоматически и с правильным соотношением сторон, но не так сильно заботитесь о округлости, используйте geom_hex:

  ggplot(df, aes(x, y, fill = Temp)) +
  geom_hex(stat = "identity", colour = "white") +
  scale_y_continuous(expand = c(0.25,0)) +
  scale_x_continuous(breaks = 1:11, expand = c(0.25,0)) +
  coord_fixed(ratio = tan(pi/3)) +
  theme_classic()

введите здесь описание изображения

person Brian    schedule 18.08.2017
comment
Спасибо за coord_fixed(ratio = tan(pi/3)) . Однозначно откладываю на будущее! Я думал, что на полпути туда, но мой триггер был слишком ржавым. :) - person TTNK; 18.08.2017
comment
@TTNK, мне всегда приходится перепроверять, рисуя треугольник, чтобы использовать теорему Пифагора и получить фактическое число. - person Brian; 18.08.2017

Может быть, что-то вроде этого? Используя функцию geom_point из package::ggplot2 (входит в tidyverse, с большим глифом:

library(tidyverse)

# Generating a data frame with alternating odds and evens
# Probably overwrought but makes the example cleaner

> df <- data.frame(x = rep(c(seq(1, 11, by = 2), seq(2, 10, by = 2)), 2), 
                 y = rep(1:4, times = c(6, 5, 6, 5)), 
                 'T' = sample(5:13, 22, replace = TRUE))

> head(df, 10)
    x y  T
1   1 1 10
2   3 1 12
3   5 1  8
4   7 1 10
5   9 1 12
6  11 1 12
7   2 2  9
8   4 2  9
9   6 2  6
10  8 2 10

> df %>% ggplot(aes(x, y)) + 
  geom_point(aes(fill = T), size = 20, shape = 23) + 
  ylim(0, 5) + 
  xlim(0, 12) + 
  coord_fixed(ratio = 1) +
  theme_minimal()

введите здесь описание изображения

person TTNK    schedule 17.08.2017