如何让ggplot2热力图X轴类别按数据集原有顺序排列而非字母序
解决热力图轴类别按CSV原有顺序排列的问题
问题核心是ggplot会自动将字符型变量按字母顺序排序,要保留CSV中Term列的原始顺序,只需把Term转为因子类型并指定水平顺序为原数据的顺序即可。
修改后的代码
library(ggplot2) library(reshape) getwd() x <- read.csv("R.csv", check.names = F) # 将Term转为因子,锁定原始顺序 x$Term <- factor(x$Term, levels = x$Term) y <- melt(x, id="Term") ggplot(y, aes(variable, Term, fill=value)) + geom_tile() + coord_flip() + scale_fill_manual(values = c("#FFE5CC","#FF9934"), guide = guide_legend(reverse = TRUE)) + theme(legend.title = element_text(color = "black", size = 10), axis.title = element_blank(), axis.text.x = element_text(angle = 90, vjust = .5, hjust = 1, color = "black", size="7"), axis.text.y = element_text(color = "black", size="12")) + scale_x_discrete(expand=expansion(0), limits=rev) + scale_y_discrete(expand=expansion(0))
关键说明
- 在读取CSV后添加的
x$Term <- factor(x$Term, levels = x$Term)是核心:将Term列转为因子类型,通过levels参数指定其顺序与原CSV中Term列的顺序完全一致,这样ggplot绘图时就不会自动按字母排序。 - 由于你使用了
coord_flip(),翻转后原本的Y轴(Term)变为X轴,因此这个修改会直接让翻转后的X轴保持CSV里的原始类别顺序。
内容的提问来源于stack exchange,提问作者Shohel Islam
相关产品推荐
相关产品推荐

