R 将ggplot2中x轴的标签按以下数值排序

R 将ggplot2中x轴的标签按以下数值排序,r,ggplot2,axis-labels,R,Ggplot2,Axis Labels,我遇到的问题是,ggplot2将因子变量的标签按字母顺序排列:它不是常规的1,2,3,…,19,20,而是1,10,11,…,8,9。这些标签值是按数字排序的,因此我希望保留它们的数字顺序。有趣的是,ggplot2并没有改变我所有绘图的顺序,但我无法确定原因 以下是我的示例(其中因子被重新排序): #带有我的数据的数据帧 df1这对我来说似乎很好: df1b <- df1 df2b <- df2 df1b$var <- as.integer(as.character(df1b$

我遇到的问题是,ggplot2将因子变量的标签按字母顺序排列:它不是常规的1,2,3,…,19,20,而是1,10,11,…,8,9。这些标签值是按数字排序的,因此我希望保留它们的数字顺序。有趣的是,ggplot2并没有改变我所有绘图的顺序,但我无法确定原因

以下是我的示例(其中因子被重新排序):

#带有我的数据的数据帧

df1这对我来说似乎很好:

df1b <- df1
df2b <- df2
df1b$var <- as.integer(as.character(df1b$var))
df2b$var <- as.integer(as.character(df2b$var))

graph<-ggplot(df2b, aes(var,mod, group=1))+ 
    geom_smooth(aes(color="red"), se=F, linetype="dotted", size=1)+ 
    geom_line(data=df2b,aes(var,low, color="red4"), size=1)+
    geom_line(data=df2b,aes(var,high, color="red4"), size=1)+
    geom_ribbon(data=df2b, aes(var,ymin=low,ymax=high), fill="lightpink", alpha=0.4)+

    geom_smooth(data=df1b, aes(var,mod, group=1, color="green"), se=F, linetype="dotted", size=1)+ 
    geom_line(data=df1b,aes(var,high, color="green4"), size=1)+
    geom_line(data=df1b,aes(var,low, color="green4"), size=1)+
    geom_ribbon(data=df1b, aes(var,ymin=low,ymax=high), fill="chartreuse1", alpha=0.4)+
    ylim(min(df2b$low,df1b$low),max(df2b$high,df1b$high))+
    scale_colour_manual(name = 'Legend', 
                                            values =c('red'='red','green'='green', 'green4'='green4', 'red4'='red4'), 
                                            labels = c('1','interval-1','2','interval-2'))+
    scale_size_area() + 
    xlab("mod var") +
    ylab(expression(f[Tmax.an]))+
    labs(title='Mod Var 1 2')

df1b我在这篇文章中尝试了每一种解决方案,实际上我在其他与这个问题相关的文章中也找到了类似的答案,但到目前为止,它们都没有奏效……只是不使用因子;通过
as.integer(as.character(…)
将它们转换回整数。如果您想更详细地标记x轴,那么方法是使用
scale\ux
而不是强制使用因子。问题是,它们是因子:我使用cut2()获得离散变量。诚然,就标签而言,它不会改变任何东西,但是将变量转换为as.integer(as.character(df1$var))并不能解决我的绘图上的问题。示例中给出的图中标签的顺序来自原始变量(“var_ori”),它是cut()函数的直接结果,我将标签更改为离散变量唯一值向量长度的数值。将它们转换为整数对我来说很好。但直接的问题是
df1
df2
中的因素没有相同的水平。如果注意到,问题仅在从不同的数据集中添加第一个图层时开始
ggplot
正在尝试协调两组不同的级别,当它将所有内容组合到一个数据帧中时,必须“重置”它们……如果x轴真的不是一个连续变量,那么您可能无论如何都不希望
geom_平滑。您可能应该做的是汇总每个x值处的y值并绘制该值
geom_smooth
如果你像你发现的那样坚持让x轴成为因子,那么它可能不会按照你想要的方式运行。它确实有效,如果我仍然想要的话,我也可以添加标签。您为什么要创建单独的数据帧?还有,我是否应该放弃整个“有时工作于其他数据帧”?因为它困扰着我,我真的很想弄清楚它。@user2092517我这样做只是为了让我仍然可以使用您的原件(省得我重新复制和粘贴)。如果没有一个具体的例子,很难说为什么它以前能工作。我编辑了你的帖子,添加了你需要的数据,如果你想检查它为什么能在这个实例中工作的话。
df1b <- df1
df2b <- df2
df1b$var <- as.integer(as.character(df1b$var))
df2b$var <- as.integer(as.character(df2b$var))

graph<-ggplot(df2b, aes(var,mod, group=1))+ 
    geom_smooth(aes(color="red"), se=F, linetype="dotted", size=1)+ 
    geom_line(data=df2b,aes(var,low, color="red4"), size=1)+
    geom_line(data=df2b,aes(var,high, color="red4"), size=1)+
    geom_ribbon(data=df2b, aes(var,ymin=low,ymax=high), fill="lightpink", alpha=0.4)+

    geom_smooth(data=df1b, aes(var,mod, group=1, color="green"), se=F, linetype="dotted", size=1)+ 
    geom_line(data=df1b,aes(var,high, color="green4"), size=1)+
    geom_line(data=df1b,aes(var,low, color="green4"), size=1)+
    geom_ribbon(data=df1b, aes(var,ymin=low,ymax=high), fill="chartreuse1", alpha=0.4)+
    ylim(min(df2b$low,df1b$low),max(df2b$high,df1b$high))+
    scale_colour_manual(name = 'Legend', 
                                            values =c('red'='red','green'='green', 'green4'='green4', 'red4'='red4'), 
                                            labels = c('1','interval-1','2','interval-2'))+
    scale_size_area() + 
    xlab("mod var") +
    ylab(expression(f[Tmax.an]))+
    labs(title='Mod Var 1 2')