R 如何在ggplot2中保持原始订单

R 如何在ggplot2中保持原始订单,r,ggplot2,R,Ggplot2,我有以下代码: df <- data.frame(Days = days,Temperature = temp) pl <- ggplot(df,aes(x=Days,y=Temperature)) + geom_point() print(pl) 当我试着运行这段代码时,它以字母顺序显示日期,而不是索引顺序Mon、Tue、Wed、Thu、Fri。如何将其更改为正确的顺序?以下代码有效: library(ggplot2) days <- c("Mon","Tue","Wed

我有以下代码:

df <- data.frame(Days = days,Temperature = temp)
pl <- ggplot(df,aes(x=Days,y=Temperature)) + geom_point()
print(pl)
当我试着运行这段代码时,它以字母顺序显示日期,而不是索引顺序Mon、Tue、Wed、Thu、Fri。如何将其更改为正确的顺序?

以下代码有效:

library(ggplot2)

days <- c("Mon","Tue","Wed","Thu","Fri")
temp <- c(21, 24, 34, 23, 23)

df2 <- data.frame(Days2=factor(days,levels=unique(days)), Temperature2 = temp)

pl2 <- ggplot(df2,aes(x=Days2,y=Temperature2)) + geom_point()
print(pl2)
它生成下图:

下面的代码工作:

library(ggplot2)

days <- c("Mon","Tue","Wed","Thu","Fri")
temp <- c(21, 24, 34, 23, 23)

df2 <- data.frame(Days2=factor(days,levels=unique(days)), Temperature2 = temp)

pl2 <- ggplot(df2,aes(x=Days2,y=Temperature2)) + geom_point()
print(pl2)

它生成了下图:

经过一点搜索,我通过安装DescTools包,以正确的顺序找到了一个内置的English weekday缩写对象。使用

data.frame(Days=factor(days,levels=DescTools::day.abb), ...)

这似乎是最有原则的方法,我想不出一个简单的方法来处理来自另一个地区的工作日名称缩写…

经过一点搜索,我通过安装DescTools包找到了一个按正确顺序排列的内置英语工作日缩写对象。使用

data.frame(Days=factor(days,levels=DescTools::day.abb), ...)

这似乎是最有原则的方法,我想不出一个简单的方法来使用另一个地区的工作日名称缩写…

@justinnoz的答案现在被删除,如果解决方案不正确,这是正确的;days将days设置为一个因子,并按顺序指定级别:days@JustinInOz的答案now deleted如果是错误的解决方案,那么它的想法是正确的;days将days设置为一个因子,并按顺序指定级别:days您和OP的教学点是,因子的顺序取决于其levels属性。不要认为Ben Bolker的解决方案是一个安全的解决方案,因为uniquedays的值可能或可能没有正确排序。你的答案更安全。这个答案与我在评论中承认的脆弱建议有何不同?天哪,本,没什么不同。这只是用玩具数据集和输出图将您的评论形式化为回答形式。当我输入玩具数据时,我先前的回答不起作用。你纠正了。你和OP的教学要点是,因子的顺序是由其levels属性决定的。不要认为Ben Bolker的解决方案是一个安全的解决方案,因为uniquedays的值可能或可能没有正确排序。你的答案更安全。这个答案与我在评论中承认的脆弱建议有何不同?天哪,本,没什么不同。这只是用玩具数据集和输出图将您的评论形式化为回答形式。当我输入玩具数据时,我先前的回答不起作用。你做到了。