r - 修剪 ggplot2 中的第一个和最后一个标签

我有一个图表,按天将两种类型的数据制成表格,我希望只修剪图表中的第一个和最后一个标签。这是一个可重现的数据示例:

library(dplyr)
library(ggplot2)
library(scales)
dates <- paste0("2014-01-", 1:31)
dat <- data.frame("Date" = sample(dates, 4918, replace=T), 
                  "Type" = sample(c('Type1', 'Type2'), 4918, replace=T, probs=c(.55, .45)))

p.data <- dat %>% group_by(Date, Type) %>% summarise(Freq = n())
p.data$Date <- as.Date(p.data$Date)

这是情节的代码:

p <- ggplot(data=p.data, aes(x=Date, y=Freq, fill=Type)) + 
              geom_bar(stat='identity', position='dodge') +
              labs(x='Date', y='Count', title='Frequency of Data by Day') + 
              theme_bw() + 
              theme(axis.text.x = element_text(angle=90),
                    panel.grid.minor = element_blank(),
                    plot.title = element_text(vjust=1.4),
                    legend.position='bottom') + 
              scale_x_date(labels=date_format("%a %d"), 
                           breaks=date_breaks("day"), 
                           limits=c(as.Date('2014-01-01'), as.Date('2014-01-31'))) + 
              scale_y_continuous(limits=c(0, 150), breaks=seq(from=0, to=150, by=25)) + 
              scale_fill_manual(values=c('dark grey', 'light green'))

可以看到,月初的前一天和月底的后一天有两个标签点。我该如何修剪它们?我可以只在 scale_x_date() 中对标签和中断调用进行子集化吗?

最佳答案

scale_x_date 中的expand 参数是一种方法。它试图通过在边缘周围留出一些额外的空间来提供帮助,但在这种情况下,它会增加超过一天的时间,因此轴标签会有这些额外的天数。

p <- ggplot(data=p.data, aes(x=Date, y=Freq, fill=Type)) + 
              geom_bar(stat='identity', position='dodge') +
              labs(x='Date', y='Count', title='Frequency of Data by Day') + 
              theme_bw() + 
              theme(axis.text.x = element_text(angle=90),
                    panel.grid.minor = element_blank(),
                    plot.title = element_text(vjust=1.4),
                    legend.position='bottom') + 
              scale_x_date(labels=date_format("%a %d"), 
                           breaks=date_breaks("day"), 
                           limits=c(as.Date('2014-01-01'), as.Date('2014-01-31')),
                           expand=c(0, .9)) + 
              scale_y_continuous(limits=c(0, 150), breaks=seq(from=0, to=150, by=25)) + 
              scale_fill_manual(values=c('dark grey', 'light green'))

https://stackoverflow.com/questions/29100326/

相关文章:

c# - 使用 C# 的条件 JSON 序列化

doctrine-orm - Doctrine2 会选择所有关联的所有字段(来自查询的 JOINS)

c# - 如何在 LINQ to DB 模型类中添加表之间的关系

can-bus - 使用 ELM327 接收 CAN 报文时的流量控制报文

clojure - 我如何获得 clojure 中的单元测试列表?

inno-setup - 安装空文件夹时访问 CurrentFileName 时出现 Inno Se

netlogo - 如何在 Netlogo 中的海龟之间创建多个链接

amazon-redshift - AWS Redshift 是否支持副本?

html - 高度以像素为单位,而不是百分比

ruby-on-rails - rails : validate unique friendship