考虑这个简单的例子
tibble(date = seq.Date(from = ymd('2019-01-01'),
to = ymd('2019-06-01'),
by = 'days')) %>%
mutate(var = rnorm(n())) %>%
barchart(var ~ date, data = ., horiz = FALSE)
很显然,x轴被弄乱了。标签太多了!如何减少日期刻度的数量?
理想情况下,可以像在scales::pretty_breaks()
中那样使用ggplot
函数,但是在这里,我什至无法手动完成该功能:
myseq <- seq.Date(from = ymd('2019-01-01'),
to = ymd('2019-06-01'),
by = '7 days')
tibble(date = seq.Date(from = ymd('2019-01-01'),
to = ymd('2019-06-01'),
by = 'days')) %>%
mutate(var = rnorm(n())) %>%
barchart(var ~ date, data = ., horiz = FALSE,
scales = list(x = list(at = myseq, rot = 45)))
只需删除所有x标签!!
你怎么看?我只需要一个lattice
解决方案。
谢谢!
答案 0 :(得分:2)
ggplot()
很好地默认了此值,在这种情况下,中断时间长达几个月:
library(tidyverse)
library(lubridate)
tibble(
date = seq.Date(
from = ymd('2019-01-01'),
to = ymd('2019-06-01'),
by = 'days')) %>%
mutate(var = rnorm(n())) %>%
ggplot() +
geom_line(mapping = aes(x = date, y = var))
要使用点阵,首先将您的小节存储为对象,使用seq()
设置间隔(at
),然后使用as.Date()
设置labels
和使用相同的seq()
为date列建立索引。
df1 <- tibble(
date = seq.Date(
from = ymd('2019-01-01'),
to = ymd('2019-06-01'),
by = 'days')) %>%
mutate(var = rnorm(n()))
df1 %>%
barchart(var ~ date, data = ., horiz = FALSE,
scales =
list(x =
list(
at = seq(1,152,7),
labels = as.Date(unlist(df1[,'date']), origin = '1970-01-01')[seq(1,152,7)],
rot = 45)
)
)
答案 1 :(得分:1)
基于此的潜在晶格解:Decrease number of x-axis ticks (labels) in barchart
library(dplyr)
library(lubridate)
library(lattice)
tb <- tibble(date = seq.Date(from = ymd('2019-01-01'),
to = ymd('2019-06-01'),
by = 'days')) %>%
mutate(var = rnorm(n()))
dateLabs <- seq(1, nrow(tb), by=7)
scalesList <- list(x = list(rot = 45, labels = format(tb$date, "%b-%d-%Y")[dateLabs], at = dateLabs))
tb %>%
barchart(var ~ date,
data = .,
horiz = FALSE,
scales = scalesList)