r - 线图产生不按时间顺序对应的图
问题描述
我得到了按字母顺序以月份开头的线图。有人可以帮我按时间顺序吗?
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))
解决方案
第一个切割是分配Month
为 a 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
-class 对象而不是字符串来定义您的时间线。即使Date
变量看起来像2019-07-15
,您也可以通过选项相当轻松地控制它在轴上的显示ggplot
方式(不同的问题,并且在 SO 上已多次被问及回答)。
这是一个转换为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
实际上默认在这里仅显示月份缩写(正是您想要的)。(我假设这里的年份和日期......如果你不关心并且分析/显示不依赖于年份,那么这很好。如果年份在其他地方很重要,你不应该只是逐字复制此代码。警告购买者:-)
推荐阅读
- python - 如何在 Altair 中设置标签文本大小?
- node.js - Heroku 部署:端口 **** 上已经有东西在运行
- jwt - 当访问令牌中没有身份时,如何使用 JWT 限制用户使用他们的资源?
- python - 基于类场的生成函数?
- excel - 在 VBA 中选择列范围
- angular - 来自其余 API 的数据未显示在 Angular 材料表中
- rxjs - 如何使用 RxJS 重构传统的同步循环?
- r - 如何在lda中保留已删除文本的文本ID
- django - 通过邮件通过 html 文件发送表单上下文
- gitlab - 权限被拒绝 - Cpanel - Git 版本控制(私人回购)