#r #ggplot2 #heatmap
#r #ggplot2 #Тепловая карта
Вопрос:
library(ggplot2)
library(reshape2)
HAVE = data.frame(VARS = c("cat", "dog", "fox", "rabbit"),
"a" = c(1,2,3,4),
"b" = c(2,3,1,4),
"c" = c(3,1,2,4))
HAVE1 = melt(HAVE, id.vars="VARS")
ggplot(HAVE1, aes(VARS, variable, fill= value))
geom_tile()
scale_fill_gradient(low="white", high="blue")
Я хочу создать цветовую карту от желтого (низкое значение) до синего (высокое значение). Я бы хотел, чтобы столбцы сверху были «переменной», а yticks были переменными, такими как: и, пожалуйста, обратите внимание, что это всего лишь пример!!
Ответ №1:
Вот вариант с coord_flip
переключением оси и переупорядочением уровней коэффициентов с помощью fct_rev
ggplot(HAVE1, aes(x = fct_rev(as_factor(VARS)), variable, fill= value))
geom_tile()
scale_fill_gradient(low="yellow", high="blue")
coord_flip()
Ответ №2:
Вот подход с pivot_longer
и scale_x_discrete
. Обратите внимание, что tidyr
это преемник reshape2
, но того же автора.
Мы можем изменить порядок уровней факторов VARS
, чтобы они отображались в нужном вам порядке.
Мы также можем избавиться от меток осей с labs
помощью и element_blank
.
library(ggplot2)
library(tidyr)
library(dplyr)
HAVE %>%
pivot_longer(-VARS,names_to = "variable", values_to = "value") %>%
ggplot(aes(x = variable, y = factor(VARS, rev(levels(VARS))), fill= value))
geom_tile()
scale_fill_gradient(low="yellow", high="blue")
scale_x_discrete(position = "top")
labs(x = element_blank(), y = element_blank())
Если вы хотите, чтобы плитки были квадратными, просто добавьте coord_equal()
функцию:
ggplot(HAVE1,aes(x = variable, y = factor(VARS, rev(levels(VARS))), fill= value))
geom_tile()
scale_fill_gradient(low="yellow", high="blue")
scale_x_discrete(position = "top")
labs(x = element_blank(), y = element_blank())
coord_equal()
Комментарии:
1. большое спасибо, да, это здорово — интересно, могут ли прямоугольники быть меньшими квадратами / квадратами? Я пытаюсь изменить это, но не смог
2. @bvowe если вы отредактируете свой пост с помощью изображения того, что вы имели в виду, я, вероятно, смогу придумать что-нибудь для вас.
3. Я думаю, добавление
coord_equal()
должно быть тем, что вы ищете.4. Чтобы изменить легенду, добавьте
guides(fill = guide_colorbar(reverse = TRUE))
. Размер изображения контролируется Rstudio или вашим вызовомpng
or5. Если это метки оси x, может быть, попробовать
theme(axis.text.x = element_text(angle = 90))
?