我正在获取以字母顺序的月份开始的线图。有人可以按时间顺序帮助我吗?
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))
答案 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)
(之所以使用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
实际上默认在此处仅显示月份缩写(正是您想要的)。 (我假设这里的年和月日……如果您不在乎,并且分析/显示不取决于年份,那么这很好。如果年份在其他地方也很重要,则您不应该只是逐字复制此代码。警告购买者:-)