termplot中的因子级别顺序

时间:2017-02-24 02:41:04

标签: r gam

我想知道你是否可以重新排序termplot中的因子水平,因为它们目前按字母顺序排列,我要求它们按时间顺序排列。

这是我用来创建情节的代码:

termplot(model2, rug=TRUE, se=T, xlabs="Month/Year", ylabs="", ylim=c(-2,3), ask=F, col.term = 1, col.se = 1, use.factor.levels=TRUE)

这会产生以下情节: enter image description here

所以我想重新排序,以便2015年7月/ 8月首先,2015年9月/ 10月,2016年4月。

我知道你可以在ggplot中相当简单地做到这一点,但是无法在termplot中找到任何方法。

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:0)

您需要将“月份年”字符表示转换为“日期”类的对象。但是,为此,您需要根据当前的区域设置整理数据。在英语美国语言环境中(您可以通过在控制台中键入Sys.getlocale("LC_TIME")来检查语言环境的TIME方面),这些是您需要采取的一些步骤:

首先,月份及其缩写的正确名称为:1月(1月),2月(2月),3月(3月),4月(4月),5月(5月),6月(6月),7月(7月) ,八月(八月),九月(九月),十月(十月),十一月(十一月),十二月(十二月)。在您的数据中,当它应为“9月”时,您有“9月”,这可能会在转换时导致错误。

其次,为了通过基础R将字符表示转换为“日期”对象,必须提供一年,一个月和一天。但是,这可以通过下面的建议代码来解决。

第三,您的数据也通过连接两个月来违反“年 - 月 - 日”格式,例如: “2015年7月/ 8月”。基数R中用于操作日期转换的函数将不接受此格式。

总而言之,您首先需要整理数据以使其成为可接受的格式,然后您可以生成所需的绘图。下面我提供的代码显示了如何在可接受的字符表示和表示日历日期的类“Date”的对象之间进行转换。

# Set the locale if your current differs from below
Sys.setlocale(category = "LC_TIME", locale = "en_US.UTF-8")

# Convert from character to class "Date"
m <- as.Date(x = paste(c("April 2016", "Jul 2015", "Sep 2015", "March 2017"), "01", sep = " "), format = "%B %Y %d")

如果您提供数据集,我可以为您提供更详细的帮助。