R ggplot2:按级别因子重新排列x轴标签';行不通

R ggplot2:按级别因子重新排列x轴标签';行不通,r,ggplot2,R,Ggplot2,我想用x轴标签绘制一个图,标签等于c(“chr”、“lab1”、“lab3”、“lab10”) 但是当我设置x轴的级别时,x轴的重新排序似乎不起作用。 有人能帮我解决这个问题吗? 我不知道为什么我不能更改x轴标签的顺序 =============== 关于数据集的更新,我的整个数据集包括1254个obs。由3个变量组成 在本例中,设置变量的级别似乎是可行的,但在我的整个数据集中却行不通 > str(melt.df) 'data.frame': 1254 obs. of 3 vari

我想用
x轴
标签绘制一个图,标签等于
c(“chr”、“lab1”、“lab3”、“lab10”)
但是当我设置
x轴
的级别时,
x轴
的重新排序似乎不起作用。
有人能帮我解决这个问题吗? 我不知道为什么我不能更改
x轴
标签的顺序

===============

关于数据集的更新,我的整个数据集包括1254个obs。由3个变量组成

在本例中,设置变量的级别似乎是可行的,但在我的整个数据集中却行不通

> str(melt.df)
'data.frame':   1254 obs. of  3 variables:
 $ gene    : Factor w/ 57 levels "NF2","TNNI3",..: 29 16 39 49 18 31 9 20 52 46 ...
 $ variable: Factor w/ 22 levels "chromosome_name",..: 2 2 2 2 2 2 2 2 2 2 ...
 $ value   : num  100 100 99.8 100 100 ...
最后一次更新,我找到了一种解决问题的方法,添加
+scale\ux\udiscrete(limits=c(“chr”,paste0(“lab”,c(1,3,10)))


感谢里卡多·塞米昂·卡斯特罗和塔尔杰的帮助

ggplot2按其级别顺序绘制任何因子变量,默认情况下,R按字母顺序设置因子的级别,使得
“lab10”
(以1开头)位于
“lab3”
之前。要更正此问题,请重新排列变量的级别:

factor(data.df$variable, c("chr","lab1","lab3","lab10")) 

另一种方法是使用
01
03
而不是
1
3

  • 变量=c(“lab01”、“lab01”、“lab03”、“lab03”、“lab10”、“lab10”、“chr”、“chr”),
  • level=c(“chr”,paste0(“lab”,c(“01”,“03”,“10”)))

非常感谢,上面的例子可以这样做,但是,它不适用于我的整个数据集。顺便问一下,你知道为什么
aes(x=factor(变量,level=c(“chr”、“lab1”、“lab3”、“lab10”))
在我的情况下不起作用吗?我不知道为什么更改ggplot内的级别不起作用,但通常修改数据集还是不错的。发布您的数据集(粘贴来自
dput(data.df)
)的输出),我会看一看。谢谢。我通过添加
+scale\ux\udiscrete(limits=c(“chr”,paste0(“lab”,c(1:4,6:7,9:14)))找到了解决问题的方法。
factor(data.df$variable, c("chr","lab1","lab3","lab10")) 
library(ggplot2)
library(viridis)

set.seed(123)
data.df=data.frame(gene=c("APC","NF2","APC","NF2","APC","NF2","APC","NF2"),
                   variable=c("lab01","lab01","lab03","lab03","lab10","lab10","chr","chr"),
                   value=c(sample.int(100, 6),5,22))

ggplot(data.df, aes(x=factor(variable, level = c("chr",paste0("lab",c("01","03","10")))),
                    y=factor(gene, level = c("NF2","APC")))) + 
  geom_tile(data=filter(data.df,variable != 'chr'), 
            aes(fill= value),colour='white') +  
  geom_point(data = filter(data.df,variable=="chr"),
             aes(col=as.factor(value)))+ 
  scale_fill_viridis_b()