折线图产生时间上不对应的绘图

时间:2019-07-16 00:37:23

标签: r ggplot2

我正在获取以字母顺序的月份开始的线图。有人可以按时间顺序帮助我吗?

test<- structure(list(Month = c("Jan", "Feb", "Mar", "Apr", "May", "Jun"
), a = c(11, 10, 9, 8, 4, 8)), row.names = c(NA, -6L), class = c("tbl_df", 
                                                                 "tbl", "data.frame"))

library(tidyverse)

ggplot(data=test, aes(x=Month, y=a, group=1)) +
  geom_line(color="red")+
  geom_point()

# keep getting months arranged alphabetically

# tried Month= month(decision_date, abbr=FALSE

test <- test %>% 
  mutate(Month = month(decision_date, abbr=FALSE))

1 个答案:

答案 0 :(得分:0)

第一个切入点是将Month分配为factor,我们可以在其中控制顺序:

test$Month <- factor(test$Month, c("Jan", "Feb", "Mar", "Apr", "May", "Jun",
                                   "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"))
# or more succinctly (thanks @JonSpring)
test$Month <- factor(test$Month, month.abb)

corrected plot

(之所以使用month.abb是因为它们恰好与您在示例数据中显示的完全一样。)

更多技术可能是使用实际日期而不是任意字符串。请注意,尽管它们是“明显”一个月的缩写,但对于R来说,它们只是字符串。我建议如果您的数据确实以日期为中心,那么您应该使用Date类对象(而不是字符串)来定义时间轴。即使Date的变量看起来像2019-07-15,您也可以使用ggplot选项很容易地控制它在轴上的显示方式(不同的问题,已经有很多人对此问题进行了解答。次)。


下面是一个转换为Date而不是将其保留为字符串的示例:

# starting with your original data
test$Month <- as.Date(paste0("2019-", test$Month, "-01"),
                      format = "%Y-%b-%d")
test
# # A tibble: 6 x 2
#   Month          a
#   <date>     <dbl>
# 1 2019-01-01    11
# 2 2019-02-01    10
# 3 2019-03-01     9
# 4 2019-04-01     8
# 5 2019-05-01     4
# 6 2019-07-01     8

您的绘图仍按原样工作,因此ggplot2实际上默认在此处仅显示月份缩写(正是您想要的)。 (我假设这里的年和月日……如果您不在乎,并且分析/显示不取决于年份,那么这很好。如果年份在其他地方也很重要,则您不应该只是逐字复制此代码。警告购买者:-)