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))
除了两个例外,我想保持原样显示以下内容。我想删除x轴标签上的第一个Nov
和x轴标签上的最后一个Dec
。我在上面的代码块中添加了coord_cartesian(xlim = as.Date(c("2017-12-01", "2018-11-01")))
,但这消除了x轴两端的“空白”填充。
如何简单地告诉ggplot删除第一个和最后一个x轴标签的文本?这将是第一个Nov
和最后一个Dec
。 请注意,这些在我的df
数据框中根本不存在,因此dplyr
过滤器可能无法正常工作。
答案 0 :(得分:2)
您可以通过使用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))
答案 1 :(得分:1)
我想这就是你想要的。 date_breaks
是不必要的。
ggplot(df, aes(date, value)) +
geom_col() +
scale_x_date(date_labels = "%b", breaks = df$date) +
theme(axis.text.x = element_text(angle = 90, vjust = 0.3))
答案 2 :(得分:0)
我建议研究R中的Lubridate软件包-您将能够将任何混乱的日期值转换为适当的POSIXT格式,并且还可以非常容易地提取月份信息-您也可以将这些日期转换为实际月份的一列,并将其用作您的轴标签,这会更整洁,因为您会在相应的月份增加一列-您还可以根据该月份进行填充并做一些其他有趣的事情!