R ggplot X轴刻度标记顺序

3

我看到了很多关于x轴标记顺序的问题,但是还没有一个能解决我的问题。 我正在尝试制作一个密度图,显示每个给定分数内百分位数的人口分布,就像这样。

library(dplyr); library(ggplot2); library(ggtheme)
ggplot(KA,aes(x=percentile,group=kscore,color=kscore))+
  xlab('Percentil')+ ylab('Frecuencia')+ theme_tufte()+ ggtitle("Prospectos")+
  scale_color_brewer(palette = "Greens")+geom_density(size=3)

但是x轴的标记会像1,10,100,11,12,..,2,20,21,..,99这样排序,而不是我想要的1,2,3,..,100的顺序输出。 enter image description here 我担心这会影响整个图表而不仅仅是标签。

3
你的x变量是一个因子。你可能想要它成为数字型变量。使用KA$percentile = as.numeric(as.character(KA$percentile))将其转换为数字型变量。 - Gregor Thomas
1
添加 dput(head(KA)) 可以帮助确认这一点。 - jeremycg
1
但是,当您的排序明显是按字母顺序排列时,“1、10、100、11、12、……、2”,确认几乎是不必要的。 - Gregor Thomas
1
而且使用100个级别,dput(droplevels(head(KA)))会更好。 - Gregor Thomas
1
由于x轴按字母顺序排序,您可以查看此帖子:https://dev59.com/W2cs5IYBdhLWcg3wh0f7 - mpalanco
尝试了所有建议,谢谢大家!@Gregor的建议更好,其他建议没有解决字母顺序问题。 - Alfredo Lozano
1个回答

1

我将把我的评论转化为答案,这样可以标记为已解决:

你的x变量几乎肯定是一个因子。你可能希望它是数字。

KA$percentile = as.numeric(as.character(KA$percentile))

当你看到奇怪的东西时,检查数据是很好的方法。运行str(KA)可以看到其中的内容。如果你只想查看类别,则sapply(KA, class)是一个不错的摘要。
另外,一个常见的R怪癖是,如果你将因子转换为数字,请通过字符方式进行转换,否则可能会仅得到级别数字。
year_fac = factor(1998:2002)
as.numeric(year_fac) # not so good
# [1] 1 2 3 4 5
as.numeric(as.character(year_fac)) # what you want
# [1] 1998 1999 2000 2001 2002

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接