首页 > 解决方案 > ggplot 删除特定的 x 轴标签

问题描述

library(tidyverse)

df <- data.frame(date = as.Date(c("2017-12-01", "2018-01-01", "2018-02-01", 
                                  "2018-03-01", "2018-04-01", "2018-05-01", 
                                  "2018-06-01", "2018-07-01", "2018-08-01", 
                                  "2018-09-01", "2018-10-01", "2018-11-01")), 
                 value = c(0.567859562, 0.514907158, 0.035399304, 0.485728823, 
                           0.925127361, 0.237531067, 0.301930968, 0.133373326, 
                           0.082275426, 0.464255614, 0.2366749, 0.652084264))

ggplot(df, aes(date, value)) + 
  geom_col() + 
  scale_x_date(date_breaks = "1 month", 
                 date_labels = "%b") + 
  theme(axis.text.x = element_text(angle = 90, vjust = 0.3))

我想保持下面显示的情节,完全一样,有两个例外。我想删除Novx 轴标签上的第一个和 x 轴标签上的最后一个Dec。我添加coord_cartesian(xlim = as.Date(c("2017-12-01", "2018-11-01")))到上面的代码块中,但这消除了 x 轴两端的“空白”填充。

我如何简单地告诉 ggplot 删除第一个和最后一个 x 轴标签的文本?这将是第一个Nov也是最后一个Dec请注意df,这些在我的数据框中根本不存在,因此dplyr过滤器可能不起作用。

在此处输入图像描述

标签: rggplot2

解决方案


您可以通过使用 seq.date 设置中断来实现您想要的:

library(tidyverse);library(lubridate)

df <- data.frame(date = as.Date(c("2017-12-01", "2018-01-01", "2018-02-01", 
                                  "2018-03-01", "2018-04-01", "2018-05-01", 
                                  "2018-06-01", "2018-07-01", "2018-08-01", 
                                  "2018-09-01", "2018-10-01", "2018-11-01")), 
                 value = c(0.567859562, 0.514907158, 0.035399304, 0.485728823, 
                           0.925127361, 0.237531067, 0.301930968, 0.133373326, 
                           0.082275426, 0.464255614, 0.2366749, 0.652084264))



ggplot(df, aes(date, value)) + 
  geom_col() + 
  scale_x_date(
               date_labels = "%b",
               breaks = seq.Date(ymd("2017-12-01"),ymd("2018-11-01"), by = "month")) + 
  theme(axis.text.x = element_text(angle = 90, vjust = 0.3))

在此处输入图像描述


推荐阅读