Как я могу контролировать масштаб оси Y для категориальных данных в ggplot2 при использовании geom_tile? - PullRequest
0 голосов
/ 17 июня 2019

Я пытаюсь создать тепловую карту с помощью ggplot в документе RMarkdown.Предполагаемый вывод - HTML-страница.Мой входной фрейм данных (npBasicLong) выглядит следующим образом:

location    hh    medianEWS
--------    --    ---------
Alpha       1     2
Alpha       2     1
Alpha       3     3
Alpha       4     1
...(and so on)
Alpha       23    3
Beta        1     4
Beta        2     4
Beta        3     1

Используя следующий код ...

ggplot(data = npBasicLong) +
  aes(x = hh) +
  aes(y = fct_rev(location)) + #fct_rev is used as a hack to reverse the ordering of the wards
  aes(fill = medianEWS) +
  geom_tile(colour = "white") +
  scale_fill_gradient2(name = 'Median\nNEWS\nScore', low = "#7cbc12", mid = "gold", high = "red", midpoint = 3) +
  geom_text (aes
             (label = medianEWS),
             size = 1.5) +
  scale_x_continuous('Hour',
                     expand = c(0, 0),
                     breaks = seq(0,24,1),
                     position = "top") +
  coord_fixed(ratio = 1) +
  theme(panel.grid.minor=element_blank(),
        panel.grid.major=element_blank(),
        axis.ticks = element_blank(),
        axis.title.y = element_blank(),
        text = element_text (size=8)
        )

... Я получаю это ...

geom_tile heatmap Проблема в том, что текст крошечный, потому что единственный способ остановить наложение ярлыков или их переполненность - это уменьшить размер текста.

ЕслиЯ изменяю значение координированного фиксированного значения на 2, а затем, вместо того, чтобы вытягивать ggplot по оси Y, просто сжимает ось X, как показано ниже ...

Squashed heatmap

У меня естьпопытался использовать theme (aspect_ratio) вместоordin_fixed, и это, кажется, не имеет значения.Я также попытался установить выходные параметры чанка (out.height и fig.height), но они также, похоже, не имеют никакого значения.

Как я могу получить график, который имеет достаточную вертикальвысота, на которой метки могут быть читаемы на веб-странице без сдавливания оси x?

1 Ответ

0 голосов
/ 22 июня 2019

tl; dr: Ответ заключается в использовании fig.height и fig.width и убедитесь, что вы установили их оба.


Подробнее

По инициативе @Jon Spring'sкомментарии выше я обнаружил ответ.Размещение здесь, если это поможет людям в будущем.В моих предыдущих исследованиях параметров чанков, описанных в статье zevross.com, я допустил две ошибки:

Сначала я использовал out.height / out.width, чтобы указать вывод в px.Это не ведет себя так, как я мог бы предсказать - изменение высоты с 800 до 1600 пикселей не удваивает размер изображения, отображаемого на вязаной HTML-странице.Как только я достиг определенного порогового значения (возможно, определяемого шириной контейнера div, внутри которого находится весь контент ноутбука), увеличение значений out.height / width не изменило.

Мое (возможно, ошибочное) чтениеиз статьи zevross было то, что out.height / width были похожи на более гибкую версию fig.height / width, которая применялась как к рисункам, так и к изображениям.Это в некотором роде правда, но я думаю, что это в основном действует как фактор масштабирования.Если проблема, как и в моем случае, в том, что соотношение сторон холста неверно, то, как только он достигнет максимальной ширины контейнера div, ничего полезного не произойдет.

Когда я переключился на использование fig.height и fig.Если ширина, то размер холста печати начал меняться, я мог устранить бессмысленные пробелы с обеих сторон моего графика, и, как следствие, график начал отображаться больше в сгенерированном HTML-документе.

Другая ошибка, которую я допустилв моих предыдущих экспериментах было установить только один параметр.Я думал, что меня заботит только одно измерение (в данном случае высота), чтобы содержимое могло определять ширину.Установка только высоты означала, что ничего не изменилось.Вы должны изменить как высоту, так и ширину.

...