R每天绘制多个观察值
R plot multiple observations per day
我一直在努力创建一个时间序列点图(不是箱线图)来容纳下面显示的每天有多个数据点的程式化数据。
数据稀疏,并且在日期范围内的许多天都会缺少数据,但是有些天可能有数百个数据点在一个狭窄的值范围内。 x 轴必须跨越整个日期范围并包括漂亮的刻度线,即使对于没有任何数据的日子也是如此。
如果 x 轴标签垂直放置,y 轴标签水平放置,我会很好。
我一直在寻求帮助并四处搜索,并花了数小时使用 ggplot2、ts()、axis() 设置等,但没有成功。 x轴尤其有问题。
看起来这应该很容易,但我是一个R菜鸟。
dt, RotMarks
2017-01-01, 1
2017-01-01, 3
2017-03-10, 2
2017-03-10, 4
2017-03-10, 6
2017-06-15, 10
2017-06-15, 15
2017-09-20, 1
2017-10-31, 12
2017-10-31, 12
2017-10-31, 12
2017-10-31, 12
2017-10-31, 12
2017-10-31, 12
2017-10-31, 12
2017-10-31, 4
2017-10-31, 4
2017-10-31, 4
2017-10-31, 4
2017-10-31, 1
2017-10-31, 1
2017-10-31, 1
2017-10-31, 1
2017-12-31, 1
2017-12-31, 1
2017-12-31, 1
使用 tidyverse 包的解决方案。我不认为用每个日期标记 x 轴是个好主意,因为它太拥挤了。可以看到示例中使用了日期分隔符为“2周”,已经有点拥挤了。 date_labels = "%Y-%m-%d"
是指定日期格式。 axis.text.x = element_text(angle = 90, hjust = 1)
是垂直放置 x 标签。
library(tidyverse)
# Expand the data frame to full sequence of dates
dat2 <- dat %>%
mutate(dt = as.Date(dt)) %>%
complete(dt = full_seq(dt, period = 1))
ggplot(dat2, aes(x = dt, y = RotMarks)) +
geom_point() +
scale_x_date(name = "Date",
date_labels = "%Y-%m-%d",
date_breaks = "2 weeks") +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
数据
dat <- read.csv(text = "dt, RotMarks
2017-01-01, 1
2017-01-01, 3
2017-03-10, 2
2017-03-10, 4
2017-03-10, 6
2017-06-15, 10
2017-06-15, 15
2017-09-20, 1
2017-10-31, 12
2017-10-31, 12
2017-10-31, 12
2017-10-31, 12
2017-10-31, 12
2017-10-31, 12
2017-10-31, 12
2017-10-31, 4
2017-10-31, 4
2017-10-31, 4
2017-10-31, 4
2017-10-31, 1
2017-10-31, 1
2017-10-31, 1
2017-10-31, 1
2017-12-31, 1
2017-12-31, 1
2017-12-31, 1",
header = TRUE, stringsAsFactors = FALSE)
我一直在努力创建一个时间序列点图(不是箱线图)来容纳下面显示的每天有多个数据点的程式化数据。
数据稀疏,并且在日期范围内的许多天都会缺少数据,但是有些天可能有数百个数据点在一个狭窄的值范围内。 x 轴必须跨越整个日期范围并包括漂亮的刻度线,即使对于没有任何数据的日子也是如此。
如果 x 轴标签垂直放置,y 轴标签水平放置,我会很好。
我一直在寻求帮助并四处搜索,并花了数小时使用 ggplot2、ts()、axis() 设置等,但没有成功。 x轴尤其有问题。
看起来这应该很容易,但我是一个R菜鸟。
dt, RotMarks
2017-01-01, 1
2017-01-01, 3
2017-03-10, 2
2017-03-10, 4
2017-03-10, 6
2017-06-15, 10
2017-06-15, 15
2017-09-20, 1
2017-10-31, 12
2017-10-31, 12
2017-10-31, 12
2017-10-31, 12
2017-10-31, 12
2017-10-31, 12
2017-10-31, 12
2017-10-31, 4
2017-10-31, 4
2017-10-31, 4
2017-10-31, 4
2017-10-31, 1
2017-10-31, 1
2017-10-31, 1
2017-10-31, 1
2017-12-31, 1
2017-12-31, 1
2017-12-31, 1
使用 tidyverse 包的解决方案。我不认为用每个日期标记 x 轴是个好主意,因为它太拥挤了。可以看到示例中使用了日期分隔符为“2周”,已经有点拥挤了。 date_labels = "%Y-%m-%d"
是指定日期格式。 axis.text.x = element_text(angle = 90, hjust = 1)
是垂直放置 x 标签。
library(tidyverse)
# Expand the data frame to full sequence of dates
dat2 <- dat %>%
mutate(dt = as.Date(dt)) %>%
complete(dt = full_seq(dt, period = 1))
ggplot(dat2, aes(x = dt, y = RotMarks)) +
geom_point() +
scale_x_date(name = "Date",
date_labels = "%Y-%m-%d",
date_breaks = "2 weeks") +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
数据
dat <- read.csv(text = "dt, RotMarks
2017-01-01, 1
2017-01-01, 3
2017-03-10, 2
2017-03-10, 4
2017-03-10, 6
2017-06-15, 10
2017-06-15, 15
2017-09-20, 1
2017-10-31, 12
2017-10-31, 12
2017-10-31, 12
2017-10-31, 12
2017-10-31, 12
2017-10-31, 12
2017-10-31, 12
2017-10-31, 4
2017-10-31, 4
2017-10-31, 4
2017-10-31, 4
2017-10-31, 1
2017-10-31, 1
2017-10-31, 1
2017-10-31, 1
2017-12-31, 1
2017-12-31, 1
2017-12-31, 1",
header = TRUE, stringsAsFactors = FALSE)