如何在R的stripchart中保持x轴类别的自定义顺序?
问题描述
我想用R绘制一组实验数据的stripchart,6个样本各3个观测值,使用的代码如下:
pro<-c("Q","Q","Q", "E","E","E", "M","M","M", "F","F","F", "G","G","G", "P","P","P" ); as.factor(pro) ges<-c(1000, 1111, 2222, 1142, 1111, 1112, 400, 441, 544, 250, 200, 150, 101, 102, 103, 800, 900, 950 ) an <-data.frame( pro, rep=c(1,2,3, 1,2,3, 1,2,3, 1,2,3, 1,2,3, 1,2,3, 1,2,3, 1,2,3, 1,2,3, 1,2,3, 1,2,3, 1,2,3), ges );an; str(an) stripchart( ges~pro,data=an,vert=T, pch=16,col="red", ylab="y axis", xlab="x axis", tck=.01, )
我对生成的stripchart整体满意,但R会将x轴的类别按字母排序,而我的实验需要按Q-E-M-F-G-P的顺序排列。我不想使用ggplot等额外包,希望找到一种简单的方法强制保持向量的原始顺序。
解决方案
核心是手动指定因子pro的水平顺序——R默认会按字母排序因子水平,只要在将pro转为因子时显式定义levels参数,就能控制x轴的显示顺序。
修改后的完整代码
# 手动指定因子水平顺序,替代原有的as.factor(pro) pro<-factor(c("Q","Q","Q", "E","E","E", "M","M","M", "F","F","F", "G","G","G", "P","P","P"), levels = c("Q", "E", "M", "F", "G", "P")) ges<-c(1000, 1111, 2222, 1142, 1111, 1112, 400, 441, 544, 250, 200, 150, 101, 102, 103, 800, 900, 950 ) an <-data.frame( pro, rep=c(1,2,3, 1,2,3, 1,2,3, 1,2,3, 1,2,3, 1,2,3, 1,2,3, 1,2,3, 1,2,3, 1,2,3, 1,2,3, 1,2,3), ges );an; str(an) stripchart( ges~pro,data=an,vert=T, pch=16,col="red", ylab="y axis", xlab="x axis", tck=.01, )
关键说明
- 原代码中
as.factor(pro)仅执行了转换操作,但未将结果重新赋值给pro,因此数据框中的pro仍为字符型,R绘图时会自动转为因子并按字母排序。 - 通过
factor()函数显式指定levels参数,可固定因子的顺序,绘图时x轴就会按照你需要的Q-E-M-F-G-P顺序显示。
内容的提问来源于stack exchange,提问作者mrax
相关产品推荐
相关产品推荐

