Изменение порядка в ggplot2 - PullRequest
0 голосов
/ 13 марта 2020

Я следую этому учебнику , чтобы составить «тепловой стол». Но я борюсь за то, как я могу изменить порядок строк и столбцов, как мы можем наблюдать, сюжет изменил порядок «x_i's». Любой намек на то, как я могу это сделать?

Вот код:

ggplot(co, aes(weeks, variable)) + 
  geom_tile(aes(fill = value)) + 
  geom_text(aes(fill = co$value, label = round(co$value, 4))) + 
  scale_fill_gradient(low = "lightblue", high = "darkslategray") + 
  theme(panel.grid.major.x=element_blank(), 
        panel.grid.minor.x=element_blank(), 
        panel.grid.major.y=element_blank(), 
        panel.grid.minor.y=element_blank(),
        panel.background=element_rect(fill="white"), 
        axis.text.x = element_text(angle=90, hjust = 1,vjust=1,size = 12,face = "bold"), 
        plot.title = element_text(size=20,face="bold"),
        axis.text.y = element_text(size = 12,face = "bold")) + 
  ggtitle("Correlation Plot") + theme(legend.title=element_text(face="bold", size=14)) + scale_y_discrete(name="") + 
  scale_x_discrete(name="") + labs(fill="Corr.")

А вот вывод:

enter image description here

данные:

> gapsds
  weeks       DS1       DS2       DS3       DS4       DS5       DS6       DS7       DS8        DS9
1     2 0.5200000 0.4589673 0.4800000 0.4933333 0.3706182 0.4927536 0.5175299 0.5709524 0.63520976
2     4 0.7066667 0.6532746 0.5866667 0.6800000 0.4974965 0.6884058 0.6510860 0.6711195 0.71506470
3     6 0.7333333 0.7269774 0.6800000 0.7333333 0.5909858 0.7681159 0.6243748 0.6377304 0.71506470
4     8 0.8133333 0.6934761 0.7600000 0.7733333 0.6510860 0.7898551 0.6444082 0.6377304 0.65698838
5    10 0.7466667 0.6532746 0.6133333 0.6933333 0.6777973 0.7101449 0.5375634 0.5709524 0.52631666
6    12 0.5333333 0.5125693 0.5066667 0.5466667 0.6444082 0.5144928 0.4440741 0.3973294 0.37386631
7    14 0.4266667 0.4522670 0.3733333 0.3866667 0.4774631 0.3623188 0.3171958 0.2904845 0.22141597
8    16 0.2666667 0.2981612 0.2533333 0.2800000 0.3305514 0.2391304 0.1368950 0.1969953 0.09800379
co=melt(gapsds)
co$weeks = as.factor(co$weeks)

1 Ответ

1 голос
/ 13 марта 2020

Я пошел вперед и симулировал mat. Вам просто нужно повторно присвоить свои поля Var1 и Var2, и вы можете сделать это, используя порядок имен столбцов в mat.

mat <- data.frame(x_1 = rnorm(100,3,0.5), x_2 = rnorm(100,8,0.5), x_3 = rnorm(100,12,0.5))
corr_mat=cor(mat,method="s")
ord=hclust(1-as.dist(corr_mat))$order
co=reshape2::melt(corr_mat[ord,ord])

# Re-ordering Var1 and Var2 by the order of when the columns appear in mat
co$Var1 <- factor(co$Var1, levels = names(mat))
co$Var2 <- factor(co$Var2, levels = names(mat))

co %>% 
  ggplot(aes(Var1, Var2)) + 
  geom_tile(aes(fill = value)) + 
  geom_text(aes(fill = co$value, label = round(co$value, 2))) + 
  scale_fill_gradient(low = "lightblue", high = "darkslategray") + 
  theme(panel.grid.major.x=element_blank(), 
        panel.grid.minor.x=element_blank(), 
        panel.grid.major.y=element_blank(), 
        panel.grid.minor.y=element_blank(),
        panel.background=element_rect(fill="white"), 
        axis.text.x = element_text(angle=90, hjust = 1,vjust=1,size = 12,face = "bold"), 
        plot.title = element_text(size=20,face="bold"),
        axis.text.y = element_text(size = 12,face = "bold")) + 
  ggtitle("Correlation Plot") + theme(legend.title=element_text(face="bold", size=14)) + scale_y_discrete(name="") + 
  scale_x_discrete(name="") + labs(fill="Corr. Coef.")
...