ggplot2中按MEM_A值排序x轴标签的问题求助
解决ggplot中x轴按y值排序且保留正确刻度的问题
我来帮你搞定这个问题!你遇到的核心矛盾是:既想让点按照MEM_A的大小排列,又要保留IDENTIFICADOR的原始数值刻度——之前用reorder或fct_reorder的方法把x轴变量转成了因子,所以才会出现刻度异常的情况。
正确的解决思路:先排序数据,再绘图
不需要修改x轴变量的类型,只需要先对数据框按MEM_A排序,再用排序后的数据绘图,就能同时满足排序需求和正确的刻度显示:
对数据框按
MEM_A排序
这里默认按升序排列,如果需要降序,加上decreasing=TRUE即可:# 按MEM_A升序排序 parte2_sorted <- parte2[order(parte2$MEM_A), ] # 若要降序:parte2_sorted <- parte2[order(parte2$MEM_A, decreasing = TRUE), ]用排序后的数据绘制图表
直接使用原始的IDENTIFICADOR作为x轴变量,此时点已经按MEM_A排序,x轴也会保留原始的数值刻度:ggplot(parte2_sorted, aes(x = IDENTIFICADOR, y = MEM_A)) + geom_point() + scale_x_continuous(breaks = seq(0, 100, 5)) + scale_y_continuous(breaks = seq(0, 100000, 2000))
为什么之前的方法会出问题?
- 你的第一版代码没有对数据排序,所以点是按照
IDENTIFICADOR的原始顺序排列,自然不会按MEM_A排序; - 使用
as.numeric(reorder(IDENTIFICADOR, MEM_A))时,reorder()会把IDENTIFICADOR转成因子,as.numeric()取的是因子的水平序号(比如1、2、3...),而不是IDENTIFICADOR的原始数值,所以x轴刻度完全偏离了预期; fct_reorder()同样是把IDENTIFICADOR转成因子,x轴会显示因子的水平标签,失去了原始数值的连续刻度属性。
额外提示:如果IDENTIFICADOR是字符型
如果你的IDENTIFICADOR原本是字符格式(但实际是数值),记得先把它转成数值型再排序:
parte2$IDENTIFICADOR <- as.numeric(parte2$IDENTIFICADOR) parte2_sorted <- parte2[order(parte2$MEM_A), ]
内容的提问来源于stack exchange,提问作者Esteban
相关产品推荐
相关产品推荐

