在日期格式轴的ggplot2中绘制次要刻度(不是网格刻度)

jbs*_*ssm 6 r ggplot2 axis-labels

我正在尝试为黑白出版物制作一些图形,我在使用轴时遇到了一些问题.

我需要在轴(而不是网格)中绘制数据的子图,并且我通过使用annotation_logticks(base=2, sides="trbl")with base 2 找到了一个技巧,因为我的数据与日志无关.

但这似乎不适用于y轴,它采用日期格式类型(xts).

到目前为止我得到的图是下面的图,我需要的是删除背景网格(该部分应该很容易)并在y轴上添加刻度(这对我来说是困难的部分). 在此输入图像描述

这是我用来做图表的代码:

ratio_plot_start_time = "01:45"
ratio_plot_end_time = "02:10"
channelNo = 1
p <- ggplot(onsetratios, aes(x=ratio*100, y=onset)) + geom_point(aes(y=onset))
p <- p + ylim(as.POSIXct(paste(date, ratio_plot_start_time, sep=" ")), as.POSIXct(paste(date, ratio_plot_end_time, sep=" ")))
p <- p + geom_errorbar(aes(ymin=onset-error, ymax=onset+error), width=0.0)
p <- p + xlab(expression("percent of peak counts"))+ ylab(expression("UT Time (2012 May 17)")) + theme(aspect.ratio = 2/(1+sqrt(5)))
p <- p + theme_bw(base_size = 14, base_family = "Helvetica") + annotate("text",x=max(onsetratios$ratio),y=as.POSIXct(paste(date, ratio_plot_end_time, sep=" ")),vjust=4,hjust=2,label=paste("F", channelNo, "'"))
p <- p + annotation_logticks(base=2, sides="trbl")
Run Code Online (Sandbox Code Playgroud)

用于构建图形的数据是:

> onsetratios
        ratio               onset    error
1  0.01092106 2012-05-17 01:49:03 19.05407
2  0.02092106 2012-05-17 01:49:35 14.89534
3  0.03092106 2012-05-17 01:51:01 12.82914
4  0.04092106 2012-05-17 01:50:22 21.45099
5  0.05092106 2012-05-17 01:50:22 21.45099
6  0.06092106 2012-05-17 01:51:13 20.09877
7  0.07092106 2012-05-17 01:51:13 20.09877
8  0.08092106 2012-05-17 01:51:13 20.09877
9  0.09092106 2012-05-17 01:51:13 20.09877
10 0.10092106 2012-05-17 01:52:34 15.53187
11 0.11092106 2012-05-17 01:53:53 14.79303
12 0.12092106 2012-05-17 01:53:53 14.79303
13 0.13092106 2012-05-17 01:53:32 17.12521
14 0.14092106 2012-05-17 01:53:32 17.12521
15 0.15092106 2012-05-17 01:53:32 17.12521
16 0.16092106 2012-05-17 01:53:32 17.12521
17 0.17092106 2012-05-17 01:46:30 36.96600
18 0.18092106 2012-05-17 01:46:30 36.96600
19 0.19092106 2012-05-17 01:46:30 36.96600
Run Code Online (Sandbox Code Playgroud)

ton*_*nov 6

我不建议使用annotation_logticks.这是实现这一目标的预期方式.我删除了标题,因为我没有安装字体.

编辑:

我从这里借用了这个函数,它工作正常,由手动断点构造提供:

onsetratios <- read.table("clipboard", head=T)
onsetratios$onset <- as.POSIXct(onsetratios$onset)
ratio_plot_start_time = "01:45"
ratio_plot_end_time = "02:10"
channelNo = 1
start_date <- as.POSIXct(paste(date, ratio_plot_start_time, sep=" "))
end_date <- as.POSIXct(paste(date, ratio_plot_end_time, sep=" "))
date <- "2012-05-17"
p <- ggplot(onsetratios, aes(x=ratio*100, y=onset)) + geom_point(aes(y=onset)) +
  geom_errorbar(aes(ymin=onset-error, ymax=onset+error), width=0.0) +
  xlab(expression("percent of peak counts"))+ ylab(expression("UT Time (2012 May 17)")) + theme(aspect.ratio = 2/(1+sqrt(5))) + 
  theme_bw(base_size = 14) + 
  annotate("text",x=max(onsetratios$ratio),y=as.POSIXct(paste(date, ratio_plot_end_time, sep=" ")),vjust=4,hjust=2,label=paste("F", channelNo, "'")) +
  ylim(c(start_date, end_date))

insert_minor <- function(major_labs, n_minor) {labs <- 
                                                 c( sapply( major_labs, function(x) c(x, rep("", 4) ) ) )
                                               labs[1:(length(labs)-n_minor)]}

date_br1 <- seq(from = start_date, to = end_date, by = "1 min")
date_br5 <- seq(from = start_date, to = end_date, by = "5 min")
p + scale_x_continuous(breaks = 0:20, labels = insert_minor(seq(0, 20, by=5), 4)) + 
    scale_y_datetime(breaks = date_br1, labels = insert_minor(format(date_br5, "%H:%M"), 4)) + 
  theme(panel.grid.minor=element_blank(), panel.grid.major=element_blank())
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述