【问题标题】:How do I keep the original order in ggplot2如何保持ggplot2中的原始顺序
【发布时间】:2018-12-09 22:37:37
【问题描述】:

我有以下代码:

df <- data.frame(Days = days,Temperature = temp)
pl <- ggplot(df,aes(x=Days,y=Temperature)) + geom_point()
print(pl)

当我尝试运行此代码时,它会按字母顺序而不是索引顺序(星期一、星期二、星期三、星期四、星期五)显示日期。如何将其更改为正确的顺序?

【问题讨论】:

  • @JustinInOz 的回答(现已删除)有正确的想法(如果是错误的解决方案); days &lt;- c("Monday","Tuesday","Wednesday","Thursday","Friday"); levels(factor(days)) 告诉你发生了什么。试试data.frame(Days=factor(days,levels=unique(days)), Temperature=temp) [如果贾斯汀愿意的话,让贾斯汀回答这个似乎是公平的……]
  • 将天数设置为一个因素并按顺序指定级别:days &lt;- as.factor(days, levels = c("Mon", "Tue",...) 虽然您的示例无法重现,但很难准确了解您的问题

标签: r ggplot2


【解决方案1】:

以下代码有效:

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)

它产生下图:

【讨论】:

  • 对你和 OP 的教导是一个因子的排序是由它的 levels 属性。 (不要认为 Ben Bolker 的解决方案会是一个安全的解决方案,因为 unique(days) 的值可能会或可能不会正确排序。你的更安全。
  • 这个答案与我在 cmets 中的(诚然脆弱的)建议有何不同...?
  • G'Day Ben,没有什么不同。它只是将您的评论形式化为带有玩具数据集和输出图的答案形式。当我输入玩具数据时,我之前的答案不起作用。你更正了。
【解决方案2】:

经过一番搜索,我通过安装DescTools 包找到了一个内置的English-weekday-abbreviation 对象(按正确顺序)。使用

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

似乎是最有原则的方法(我想不出一种简单的方法来使用来自其他语言环境的工作日名称缩写......)

【讨论】:

    猜你喜欢
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多