首页 > 解决方案 > 更改 ggplot2 中的顺序

问题描述

我正在按照本教程制作“热表”。但是我正在努力改变行和列的顺序,正如我们所看到的,情节改变了“x_i”的顺序。关于我该怎么做的任何提示?

这是代码:

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.")

这是输出:

在此处输入图像描述

数据:

> 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)

标签: rggplot2correlation

解决方案


我继续模拟mat。您只需要重新调整Var1Var2字段的级别,并且可以通过使用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.")

推荐阅读