GGPlot перевернуть этот график

#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 or pdf , а не ggplot.

5. Если это метки оси x, может быть, попробовать theme(axis.text.x = element_text(angle = 90)) ?